C# 继承
时间:2014-03-21 08:31:46
收藏:0
阅读:422
C# 类的继承
(1)结构体不能被继承
(2)基类的所有成员都会被派生类继承,但是private继承后不能被访问,其余类型都可以被访问。
(3)类继承时的基类只能有1个,并且必须放在“:”的后面(紧挨着),后面可以跟多个接口
(4)基类方法声明为virtual时,派生类可以利用override重写此方法
public class Xt { int xx; public override string ToString() { return "what a fine day it is"; } }
(5)基类的方法是abstract时候,派生类若不再是abstract class,则必须实现此方法。
(6)通过sealed 来修饰类或者类成员
当sealed 修饰类时候,此类被密封,从而不能做位其他类的基类
public sealed Tc { //... }
当sealed用来修饰属性或者方法的时候,必须与override一起使用,表示是对方法的重写之后再也不能更改
重写的方法必须是基于 virtual、abstract 或 override的。
override 之后,表示派生类调用该同名方法时候不会调用基类中的,而是被重写的。
public sealed override string ToString() { //return base.ToString(); return "what a fine day iterator is"; }
(7)用new来隐藏基类中的字段,属性,方法
此时表示会把基类中具有相同签名的方法,同名的字段,属性给隐藏而不是重写,不一定要加new,但是不加new会出现报警。
(8) new 和override的区别
new 类似C++派生类中的重定义,override类似C++中类中的虚函数,通过基类的指针或者引用来调用,最后通过运行时确定调用具体哪个函数。
示例:
namespace ConsoleApplication5 { class Program1 { public sealed override string ToString() { //return base.ToString(); return "what a fine day iterator is"; } public void print(int x) { Console.WriteLine("this is int in Program1:{0}",x); } public virtual void print(string str) { Console.WriteLine("this is string in Program1:{0}",str); } } class Program2 : Program1 { //public override string ToString() //error //{ // return "funck"; //} public void print(int x) { Console.WriteLine("this is int in Program2:{0}",x); } public override void print(string str) { Console.WriteLine("this is string in Program2:{0}",str); } } class Program { static void Main(string[] args) { Program1 A1 = new Program1(); Program1 A2 = new Program2(); A1.print(1); A1.print("A"); A2.print(1); A2.print("A"); Program2 B = new Program2(); B.print(1); B.print("A"); } } }
原文:http://blog.csdn.net/ddupd/article/details/21659601
评论(0)