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

原文地址:https://www.cnblogs.com/chinabc/p/1707313.html