zoukankan      html  css  js  c++  java
  • C#几个例子[静态构造函数,继承,虚方法]

    1.静态构造函数的执行
    静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
    代码
    using System;

    public class A
    {
      
    public static int X;
      
    static A()
      {
        X 
    = B.Y + 1;
      }
    }


    public class B
    {
      
    public static int Y = A.X + 1;
      
    static B()
      {
      }
    }

    public class C
    {
        
    public static void Main()
        {
            Console.WriteLine( 
    "X={0},Y={1}", A.X, B.Y );
        }
    }

    2,1

    静态构造函数具有以下特点:

    • 静态构造函数既没有访问修饰符,也没有参数。

    • 在创建第 一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化

    • 无法直接调用静态构造函数。

    执行shunxu1. 先static 变量初始化

    2. 再static 构造函数

    3. 实例化时先初始化非静态变量,后自动调用构造函数.


    继承中new 和override 区别
     public abstract class A
        {
            
    public A()
            {
                Console.WriteLine(
    'A');
            }

            
    public virtual void Fun()
            {
                Console.WriteLine(
    "A.Fun()");
            }
        }

        
    public class B : A
        {
            
    public B()
            {
                Console.WriteLine(
    'B');
            }

            
    public new void Fun()
            {
                Console.WriteLine(
    "B.Fun()");
            }

            
    public static void Main()
            {
                A a 
    = new B();
                a.Fun();
            }
        }

    结果是:

    A

    B

    A.Fun()

    因为B中是New,  如果是override重写这方法,则会

     3

    代码
     public class A
        {
            
    public virtual void Fun1(int i)
            {
                Console.WriteLine(i);
            }

            
    public void Fun2(A a)
            {
                a.Fun1(
    1);
                Fun1(
    5);
            }
        }

        
    public class B : A
        {
            
    public override void Fun1(int i)
            {
                
    base.Fun1(i + 1);
            }

            
    public static void Main()
            {
                B b 
    = new B();
                A a 
    = new A();
                a.Fun2(b);
                b.Fun2(a);
            }
        }

    结果:

    2

    5

    1

    6

    public class A
        {
            
    public A() 
            {
                printMe();
            }
            
    public virtual void printMe(){}
        }

        
    public class B:A
        {
            
    int x = 1;
            
    int y;
            
    public B() 
            {
                y 
    = -1;
            }
            
    public override void printMe()
            {
                Console.Write(
    "A={0},B={1}",x,y);
                Console.ReadLine();
            }
        }
        
    public class Program
        {
            
    static void Main(string[] args)
            {
                
    new B();
            }
        }

     结果为:

    A=1,B=0

  • 相关阅读:
    图片剪纸刀:批量切割图片工具
    Photosynth软件试用(将照片拼接成实景)
    制作一份简单的网络地图(世博地图的配准和切割)
    Discuz论坛地图插件(通过自定义Discuz Code实现)
    Maven Settings.xml 配置模板
    CentOS 7 firewalld 配置详解 (转)
    Silverlight学习笔记八右键菜单控件
    Silverlight学习笔记十三关于SilverLight的打印
    Silverlight学习笔记十二动态加载图片和显示提示(ToolTip)
    Silverlight学习笔记十一动态创建TabContro的TabItem
  • 原文地址:https://www.cnblogs.com/chinabc/p/1707313.html
Copyright © 2011-2022 走看看