您的位置:首页 > 编程语言 > C#

C#多态 重载 虚方法 重写

2011-12-02 10:30 302 查看
抽象类用abstract 修饰 同样方法用abstract修饰的就是抽象方法。

抽象类不能实例化。

抽象类可以包含抽象方法和抽象访问器。

不能用
sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。
采用 sealed
修饰符的类无法继承,而 abstract修饰符要求对类进行继承。



重载 overload修饰(参数的个数不一致,参数的类型不一致,方法名相同)与方法的返回类型无关,重载一般发生在同一个类里。

重写(字面意思就是重新实现) Override 是对父类的方法进行实现,这个“重新设计”的的基础是方法名和参数完全一致,但是内部实现体不一样。

重写一般发生在父类和子类之间,一般父类定义一个虚方法或抽象方法,子类根据具体情况“重写”其中的实现。

override方法和
virtual方法必须具有相同的访问级别修饰符。



虚方法用virtual修饰 ,它们可以在派生类中被重写(override)。例如,此方法可被任何继承它的类重写。



virtual修饰符不能与
static、abstract,private或
override修饰符一起使用



const关键字用于修改字段或局部变量的声明。
它指定字段或局部变量的值是常数,不能被修改。



sealed 当对一个类应用sealed
修饰符时,此修饰符会阻止其他类从该类继承。



最后一个new和 virtual/override的区别 看个例子(csdn的例子 我觉的写的很好!)

new 用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说在使用派生类的方法是调用的方法是New关键字新定义出来的方法,而不是基类的方法。在不使用New关键字来隐藏基类方法也是可以的,编译器会出现一个警告,提示如果有意去隐藏基类的方法,请使用New关键字修饰。

New和Override这两个关键字是互斥的。不可以同时使用。

Override关键字主要是提供派生类对基类方法的新实现,重写的基类方法必须和Override的方法具有相同的签名,此关键字不可以用于重写非虚方法和静态方法,与其配套使用的关键字是Virtual、abstract、Override。与此同时,Override方法还不可以修改Virtual方法的可访问性,Override方法和Virtual方法必须具有相同的访问修饰符,不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。



class Program

{

static void Main(string[] args)

{

contact ct1 = new class1();

contact ct2 = new class2();

class2 sp = new class2();

sp.prinf();

ct1.prinf();

ct2.prinf();

}

}

abstract public class contact

{

public virtual void prinf()

{

Console.WriteLine("这是虚方法");

}

}

public class class1 : contact

{

public override void prinf()

{

Console.WriteLine("这是个重写的新方法");

}

}

public class class2 : contact

{

public new void prinf()

{

Console.WriteLine("这是另一个新的方法");

}

}



结果:

这是另一个新的方法;

这是个重写的新方法

这是虚方法





一万年太久,只争朝夕 大丈夫处世 立功名 得富贵 就在今朝

生活若是习惯了 就会消磨一个人的意志 失去上进心 最后变成了麻木的阿Q
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐