我们可以1、在派生类中引用基类型的静态字段,2、通过派生类类型引用基类的静态字段,例如:
public class Base
{
public static int test = 0;
}
public class Derived : Base
{
public void Method()
{
test = 100;
}
}
public class Program
{
static void Main(string[] args)
{
Derived derived = new Derived();
derived.Method();
int p = Base.test; // p = 100;
}
}
或者
public class Base
{
public static int test = 0;
}public class Derived : Base { }public class Program
{
static void Main(string[] args)
{
Derived.test = 100;
int p = Base.test; // p = 100;
}
}
但是实际上,这不是通过继承得到的,而是通过编译时静态绑定得到的,原因有两个:1、实验结果:对子类数据的修改使得基类的数据得到了修改,这显然不是继承的特性;2、IL代码,在IL代码中Derived对test的调用都被绑定为Base对test的调用。
另外,其它的静态成员,如静态方法、静态属性等,也不会被派生类型所继承,同样是编译时静态绑定。
public class Base
{
public static int test = 0;
}
public class Derived : Base
{
public void Method()
{
test = 100;
}
}
public class Program
{
static void Main(string[] args)
{
Derived derived = new Derived();
derived.Method();
int p = Base.test; // p = 100;
}
}
或者
public class Base
{
public static int test = 0;
}public class Derived : Base { }public class Program
{
static void Main(string[] args)
{
Derived.test = 100;
int p = Base.test; // p = 100;
}
}
但是实际上,这不是通过继承得到的,而是通过编译时静态绑定得到的,原因有两个:1、实验结果:对子类数据的修改使得基类的数据得到了修改,这显然不是继承的特性;2、IL代码,在IL代码中Derived对test的调用都被绑定为Base对test的调用。
另外,其它的静态成员,如静态方法、静态属性等,也不会被派生类型所继承,同样是编译时静态绑定。