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
静态构造函数具有以下特点:
静态构造函数既没有访问修饰符,也没有参数。
在创建第 一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
无法直接调用静态构造函数。
继承中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