- 隐藏基类的方法
- 调用重写或隐藏的基类方法
- 嵌套的类型定义
隐藏基类的方法
当从基类继承一个(非抽象)成员时,也就继承了其实现的代码,如果继承的成员是虚拟的,就可以用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关键词的情况下,如果使用的是基类对象,调用的还是基类的方法,子类对象调用的是子类方法
从图中可以看出实例化子类的时候都是先实例化基类 ,然后才执行子类的构造函数,最后是验证了上面两种隐藏方式的的区别。
调用重写或隐藏的基类方法
无论是重写成员还是隐藏成员,都可以在派生类内部访问基类成员,这在许多情况下是很有用的,
例如:
- 要对派生类的用户隐藏继承的公共成员,但仍能在类中访问其功能
- 要给继承的虚拟成员添加实现代码,而不是简单的使用重写的新代码替换它
为此可以使用Base关键词,它表示在派生类中的基类的实现代码
嵌套的类型定义
除了在名称空间中定义类以外还可以在其他类中定义这些类
public class MyClass { public class MyNestedClass { } }
使用方法:
CSharpRumenJD.MyClass.MyNestedClass mynestedclass = new MyClass.MyNestedClass();
时间: 2024-10-15 07:47:24