C#多态 重载 虚方法 重写

抽象类用abstract 修饰 同样方法用abstract修饰的就是抽象方法。

抽象类不能实例化。

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

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

 

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

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


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

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

 

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

 

virtual修饰符不能与 staticabstract,privateoverride修饰符一起使用

 

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

 

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

 

最后一个newvirtual/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

你可能感兴趣的:(Net)