抽象类用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