`
cloudtech
  • 浏览: 4594621 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

C#中修饰符用法“virtual(虚拟函数)、override(函数复写)、static(静态函数)、abstract(抽象函数)、sealed(密封函数)”

 
阅读更多

1、virtual用于修饰方法、属性、索引器或者事件声明,并使它们可以在派生类中被重写。virtual不能与static、abstract、private或者override修饰符一起使用。

声明为virtual的方法被重写时,派生类中可以使用base关键字访问父类中的publid,protected成员。语法:base.member

但base关键字不能跳过类层次结构中的多个层次,子类不能访问祖父类的成员。base.base.member是非法的

2、函数复写override也被称为覆盖或重写override要扩展或者修改继承的方法、属性、索引器或事件的抽象实现或者虚拟实现,必须使用override修饰符。不能重写非虚方法或静态方法。重写的基方法必须是virtualabstractoverride的。

3、static使用它声明属于类型本身而不是属于特定的对象的静态成员。static修饰符可以用于类、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。

下面的类声明为static,并且只包含static方法:

static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}

常数或者类型声明隐式地是静态成员。

不能通过实例引用静态成员。然而,可以通过类型名称引用它。例如,请考虑以下类:

复制代码
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
复制代码

若要引用静态成员x,请使用完全限定名MyBaseC.MyStruct.x,除非可从相同范围访问成员:

Console.WriteLine(MyBaseC.MyStruct.x);

尽管类的实例包含该类所有实例字段的单独副本,但每个静态字段只有一个副本。

不可以使用this来引用静态方法或属性访问器。

如果对类应用static关键字,则该类的所有成员都必须是静态的。

类和静态类可以有静态构造函数。静态构造函数在程序开始和类实例化之间的某个时刻调用。

4、abstract修饰符指示所修饰的内容缺少实现或未完全实现。abstract 修饰符可用于类、方法、属性、索引器和事件。在类声明中使用abstract修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

5、所谓函数重载是指同一个函数名可以对应着多个函数的实现。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数的类型不同。这就是函数重载的概念。函数重载在类和对象的应用尤其重要。




分享到:
评论

相关推荐

    override abstract virtual interface比较

    override abstract virtual interface比较

    静态(static)方法重写(override)

    静态(static)方法重写(override)

    C#25个问题 静态成员和非静态成员的区别等等

    1.静态成员和非静态成员的区别?...11.可以使用抽象函数重写基类中的虚函数吗? 12.密封类可以有虚函数吗? 13.什么是属性访问器? 14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?

    c#基础学习问答c#基础学习问答

    11.可以使用抽象函数重写基类中的虚函数吗? 12.密封类可以有虚函数吗? 13.如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类中有 get 和 set 两个呢? 14.abstract ...

    new、abstract、virtual、override,sealed关键字区别和使用代码示例

    new、abstract、virtual、override,sealed关键字区别和使用代码示例

    全面解读C#编程中的析构函数用法

    析构函数既没有修饰符,也没有参数。 例如,下面是类 Car 的析构函数的声明: class Car { ~Car() // destructor { // cleanup statements... } } 该析构函数隐式地对对象的基类调用 Finalize。这样,前面的...

    你必须知道的C#的25个基础概念(附源码)

    答:静态变量:静态变量使用 static 修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值非静态变量:不带有 static 修饰符声明的变量称做非静态变量在类被实例化时创建...

    C#基础概念.doc

    11、可以使用抽象函数重写基类中的虚函数吗? 12、密封类可以有虚函数吗? 13、如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类中有 get 和 set 两个呢? 14、...

    ImportDemo.7z

    abstract 抽象 1.覆盖父类,让子类重新定义。 2.抽象方法 子类必须实现 3.抽象类 不能被实例化,只能被继承。... 接口不可以使用修饰符 abstract virtual override static 接口不能定义字段和不能定义方法体。

    C#语言中的修饰符汇总

    下面主要从C#中的访问修饰符,作用于类和结构的修饰符,用在方法或变量的修饰符和特殊作用的修饰符四种,来给大家介绍。 1. 访问修饰符 指定声明的类型和类型成员的可访问性。 (1) public:是类型和类型成员的访问...

    C#基础概念二十五问

    11.可以使用抽象函数重写基类中的虚函数吗? 12.密封类可以有虚函数吗? 13.什么是属性访问器? 14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗? 15.接口可以包含哪些成员? 16.类和结构的...

    C#的25个问题(内附代码示例)

    11.可以使用抽象函数重写基类中的虚函数吗? 12.密封类可以有虚函数吗? 13.什么是属性访问器? 14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗? 15.接口可以包含哪些成员? 16.类和结构的...

    c#中的interface abstract与virtual介绍

    abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现

    Lua 类的继承与函数override

    Lua中没有类的概念,但是程序猿说要面向对象,然后就有类。程序猿说要继承 和override,然后就有了继承 和 override 。

    c#中虚函数的相关使用方法

    虚方法的实现可以由派生类所取代,这种取代是通过方法的重写实现的(以后再讲)虚方法的特点:虚方法前不允许有static,abstract,或override修饰符虚方法不能是私有的,因此不能使用private修饰符虚方法的执行:...

    C#中new的用法及与override的区别分析

    C#中new的用法有三种: (1)new是运算符,用于创建对象和调用构造函数。如Class1=new Class1();也可以为值类型调用默认的构造函数如int a=new int();此时a=0. (2)new是修饰符,用于隐藏基类成员的继承成员。override...

    c#学习笔记——学习心得

    C#中的各种名词: ...new(新的)、static(静态的)、virtual(虚拟的)、override()、sealed(密封的)、abstranct(抽象的)、extern(外面的) 派生类调用基类的方法可以使用base关键字,如base.Method();

    深入理解C# abstract和virtual关键字

    代码如下: class A { public virtual void Func() // 注意virtual,表明这是一个虚拟函数 { Console.WriteLine(“Func In A”); } } class B : A // 注意B是从A类继承,所以A是父类,B是子类 { public override void ...

    sealed 修饰符是干什么的?

    sealed 修饰符表示密封用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义上互相排斥用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用,

    深入理解C#中new、override、virtual关键字的区别

    在本文中,只具体介绍new作为修饰符的作用,在用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说在使用派生类的方法是调用的方法是New关键字新定义出来的方法,而不是基类的方法。在不使用New关键字来

Global site tag (gtag.js) - Google Analytics