c#中基类方法没有virtual ,可以被重写吗
没有virtual ,只好new了,是这样吗??
3
带 override 关键字的,就是默认包括virtual的意思吗???
也就是说只要一个方法是带virtual,从祖宗那里带
之后的关于这个方法,只要没有被new,一直可以override吗???无论多少代 展开
推荐于2017-09-03 · 知道合伙人软件行家
1、重写:继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的,即方法名,参数,返回值都相同。
例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
namespace 方法重写
{
class Program
{
static voidMain(string[] args)
{
BaseClass CO =new ClassOverride();
CO.SetName("Override");
}
//基类
public classBaseClass
{
public virtualvoid SetName(string name)
{
Console.WriteLine("基类:我的名字是" + name);
}
}
//派生类
public classClassOverride : BaseClass
{
publicoverride void SetName(string name)
{
Console.WriteLine("Override:我的名字是" + name);
}
}
}
}
2、重写override一般用于接口实现和继承类的方法改写,要注意:
1)覆盖的方法的标志必须要和被覆盖的方法的名字和参数完全匹配,才能达到覆盖的效果。
2)覆盖的方法的返回值必须和被覆盖的方法的返回一致。
3)覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类。
4)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
3、虚方法和抽象方法的区别
1)虚方法有一个实现部分可以被子类继承,从而使子类获得和基类相同的方法,另外也为派生类提供了覆盖该方法的选项。相反,抽象方法没有提供实现部分,是一种强制派生类覆盖的方法(否则派生类不能成具体类)
2)(abstract)抽象方法只能在抽象类中声明,(virtual)虚方法不是。
3)(abstract)抽象方法必须在派生类中重写而(virtual)虚方法不必。
4)(abstract)抽象方法不能声明方法实体,虚方法可以。
http://msdn.microsoft.com/zh-cn/vstudio/ebca9ah3(VS.80).aspx