首页 > 代码库 > C# 类成员备忘

C# 类成员备忘

  • 隐藏基类的方法
  • 调用重写或隐藏的基类方法
  • 嵌套的类型定义

 

隐藏基类的方法

当从基类继承一个(非抽象)成员时,也就继承了其实现的代码,如果继承的成员是虚拟的,就可以用Overrid重写这段实现代码,

无论继承的成员是否为虚拟的,都可以隐藏这些实现代码,这在继承的公共成员不像预期的那样工作时,是很有用的,

隐藏1:使用New关键词

    public class MybaseClass    {        public void DoSomething()        {            Console.WriteLine("MybaseClassDoSomething");        }    }    public class MyDrivedClass : MybaseClass    {        new public void DoSomething()        {            Console.WriteLine("MyDrivedClassDoSomething");        }           }

隐藏2:使用重写方法

    public class MybaseClass    {             public virtual void DoSomething1()        {            Console.WriteLine("MybaseClassDoSomething1");        }    }    public class MyDrivedClass : MybaseClass    {        public override void DoSomething1()        {            Console.WriteLine("MyDrivedClassDoSomething1");        }    }

使用时需要注意这两种方法的区别:

重写的情况下,无论是使用基类的对象还是子类的对象 调用的都是重写后的方法,

New关键词的情况下,如果使用的是基类对象,调用的还是基类的方法,子类对象调用的是子类方法

从图中可以看出实例化子类的时候都是先实例化基类 ,然后才执行子类的构造函数,最后是验证了上面两种隐藏方式的的区别。

调用重写或隐藏的基类方法

无论是重写成员还是隐藏成员,都可以在派生类内部访问基类成员,这在许多情况下是很有用的,

例如:

  1. 要对派生类的用户隐藏继承的公共成员,但仍能在类中访问其功能
  2. 要给继承的虚拟成员添加实现代码,而不是简单的使用重写的新代码替换它

 为此可以使用Base关键词,它表示在派生类中的基类的实现代码

 

嵌套的类型定义

除了在名称空间中定义类以外还可以在其他类中定义这些类

    public class MyClass    {        public class MyNestedClass        {        }    }

 使用方法:

  CSharpRumenJD.MyClass.MyNestedClass mynestedclass = new MyClass.MyNestedClass();

 

C# 类成员备忘