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 );
}
}
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();
}
}
{
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);
}
}
{
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();
}
}
{
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