C# virtual 这个关键字

The virtual keyword is used to modify a method, property, indexer, or event declaration and allow for it to be overridden in a derived class. For example, this method can be overridden by any class that inherits it:

public virtual double Area()
{
    return x * y;
}

You cannot use the virtual modifier with the staticabstract, private, or override modifiers. The following example shows a virtual property:

class MyBaseClass
{
    // virtual auto-implemented property. Overrides can only
    // provide specialized behavior if they implement get and set accessors.
    public virtual string Name { get; set; }

    // ordinary virtual property with backing field
    private int num;
    public virtual int Number
    {
        get { return num; }
        set { num = value; }
    }
}

class MyDerivedClass : MyBaseClass
{
    private string name;

   // Override auto-implemented property with ordinary property
   // to provide specialized accessor behavior.
    public override string Name
    {
        get
        {
            return name;
        }
        set
        {
            if (value != String.Empty)
            {
                name = value;
            }
            else
            {
                name = "Unknown";
            }
        }
    }

}
时间: 2024-10-16 06:56:57

C# virtual 这个关键字的相关文章

虚方法virtual、抽象方法abstract、接口interface区别

接口.抽象类.抽象方法.虚方法: 这四个名词时非常容易混淆的: 首先说一下接口 与抽象类 的异同: 相同点: 1.他们都不能实例化自己,也就是说都是用来被继承的. 2.抽象类中的抽象方法和接口方法一样,都不能有方法体 不同点: 1.抽象类里可以有字段,接口中不能有字段. 2.抽象类中的普通方法可以有方法体,而接口方法没有方法体. 3.接口中的方法不能有访问修饰符,抽象类中的抽象方法被继承,需要override重写 . 4.接口更像是一种规范,一种约束. 5.一个子类只能继承一个抽象类,但却可以继

C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较

由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针类型来判断的).纯虚函数是一种在父函数中只定义而不实现的一种函数,不能用来声明对象,也可以被称为抽象类.纯虚函数的实现也可以在类声明外进行定义.C++中的抽象类abstract class是指至少有一个纯虚函数的类,如果一个类全部由纯虚函数组成,不包括任何的实现,被称为纯虚类. Java中的普通函数

C++ virtual继承

C++ virtual继承的另一种名称是菱形继承,主要目的是用于解决从不同类继承来的同名数据成员在内存中有不同的拷贝,造成数据不统一的 问题,以致于在进行类释放时造成内存泄漏.将共同的基类作为虚基类,这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同 一个函数名也只有一个映射.这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题. 如下是实现格式: class 派生类名:virtual 继承方式  基类名   //virtual是关键字,声明该基类为派生类的虚基类. 在

单继承、多继承--问题解析

public.protected.private不仅是类中的访问限制符,在c++中"继承"中,它们还表示继承关系,public表示公有继承,protected表示受保护的,private表示私有的,如下图: B类继承A类,我们称A类为基类(父类),称B类为派生类(子类),子类包括父类的成员变量和成员函数,三种继承关系基类成员在派生类中的访问关系变如下. 下面是以B继承A的详细代码: //单继承    A->B class A { public:      void fun1()

C++虚继承解说

1.概括 在CPlusPlus多继承编程中时常遇到这样一个问题--若子类实现多个基类或接口继承,多基类或接口中存在成员名相同,在客户与实现类之间的通信时编译器报错"不能这样使用,会产生二义性"由于这个问题的解决方法很多.比如说,可以把相同的成员名给改过来.但是,从专业的角度,可能虚拟继承会解决这个问题.那接下来我看看c++是怎么避免这种问题的. 2.概念 当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一

C++之------虚函数

C++虚函数 在SmartOS中,virtual的关键字就是C++的虚函数定义 这里被virtual的关键字修饰的成员函数,就是虚函数 虚函数在被继承时被程序重新定义,它在使用的时候,他们都是通过同一个基类(父类)锁继承过来,他们的函数名也是一样的,但是他们的功能却不相同,这就是他的多态. 面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了“一个接口,多种

C++笔记(仅C++特性,需C语言基础)

C++复习笔记一(类的声明定义应用与构造函数析构函数部分)const在C语言中是"不能被改变值的变量",而在C++种子则是"一种有类型描述的常量",常量必须初始化,并且不可以改变const int *P=15;const 在*的左边,所以*p是常量,不可以改变int * const p=15;const在*的右边,所以p是常量,但是*p不是,*p是int型,*p的值可以改变const型的引用只能用const型,不能用普通类型来引用,因为普通类型引用可能会修改cons

接口 抽象类 虚方法 三者比较-1

接口 1.接口只提供方法规约,不提供方法体: 2.接口中的方法不能用关键字修饰: 3.接口里不能有接口和变量: 4.接口里的方法在子类中必须全部实现: 5.接口可以实现多重继承: 抽象类 1.抽象类可以从接口继承: 2.抽象类中的实体方法在子类中不可以重写,只可以被引用: 3.抽象类中的抽象方法不可以有方法体,抽象类中的抽象方法在子类中必须重写: 4.抽象类中的虚方法在子类中可以选择性的重写: 虚方法 1.可以在子类选择性的重写: 2.不重写也可被子类调用: 接口与抽象类的异同 1.抽象类的抽象

c++ 虚继承

虚继承(个人感觉用到的地方不多,项目中没有用到这个的) 最典型的例子就是iostream的继承方式 class istream : virtual public ios{...};//此处就是虚继承,指定ios为虚基类 class ostream : virtual public ios{...}; class iostream public istream, public ostream{...}; 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置