Partial(部分方法,局部方法),virtual(虚方法),abstract(抽象方法)

Partial 部分方法顾明思议是方法的一部分,不完整的,在ide编译时候,会将所有部分方法加载到一起统一编译,如果分部方法没有被实现,编译器就不会、对他们进行编译。

局部类型的限制

(1) 局部类型只适用于类、接口、结构,不支持委托和枚举。
(2) 同一个类型的各个部分必须都有修饰符 partial。
(3) 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。
(4) 一个类型的各个部分必须被同时编译。

3. 局部类型的注意点

(1) 关键字partial是一个上下文关键字,只有和 class、struct、interface 放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。
(2) 局部类型的各个部分一般是分开放在几个不同的.cs文件中,但C#编译器允许我们将他们放在同一文件中。

4. 局部类型的应用特性

在局部类型上的特性具有“累加”效应。

[Attribute1, Attribute2("Hello")]
partial class Class1{}

[Attribute3, Attribute2("Exit")]
partial class Class1{}

相当于

[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]
class Class1 {}

注:Attribute2属性允许在类上多次使用。

5. 局部类型上的修饰符

(1) 一个类型的各个部分上的访问修饰符必须维持一致性。
(2) 如果一个部分类使用了abstract修饰符,那么整个类都将被视为抽象类。
(3) 如果一个部分类使用了 sealed 修饰符,那么整个类都将被视为密封类。
(4) 一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed。
(5)如果一个部分类使用了 static修饰符,那么整个类都将被视为静态类

Virtual 虚方法

首先虚方法是延迟加载的,这点需要注意

1.虚拟成员的实现可由派生类中的重写成员更改

调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。

默认情况下,方法是非虚拟的。不能重写非虚方法。

virtual 修饰符不能与 staticabstract, private 或 override 修饰符一起使用。

除了声明和调用语法不同外,虚拟属性的行为与(abstract)抽象方法一样。

  • 在静态属性上使用 virtual 修饰符是错误的。
  • 通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。

什么时候该用Virtual 什么时候用abstract 呢?

abstract是标示一个可以扩展但不能实体化,必须别实现的类或方法,声明一个abstract 时候抽象想法里面是没有具体实现的,虚方法中可以有原始实现,

abstract方法必须在派生类中重写,而virtual则不必,
abstract方法只能在抽象类中声明,虚方法则不是 
abstract方法不能声明方法实体,      abstract public void AAA();   虚方法则可以      public virtual void BBB()        {            Console.WriteLine("A");        }虚方法可以实现多态,而抽象方法不可以。。。
时间: 2024-10-08 15:26:22

Partial(部分方法,局部方法),virtual(虚方法),abstract(抽象方法)的相关文章

使用虚方法和多态来改善源代码的扩展性

-多态:(转自CSND) 通过继承,一个类可以用作多种类型:可以用作它自己的类型.任何基类型,或者在实现接口时用作任何接口类型.这称为多态性.C# 中的每种类型都是多态的.类型可用作它们自己的类型或用作 Object 实例,因为任何类型都自动将 Object当作基类型. 多态性不仅对派生类很重要,对基类也很重要.任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象.基类的设计者可以预测到其基类中可能会在派生类中发生更改的方面.例如,表示汽车的基类可能包含这样的行为:当考虑的汽

5、面向对象以及winform的简单运用(方法重载、隐藏、重写与虚方法)

方法的重载: 规定一个方法可以具有不同的实现,但方法的名称是相同的.如: //同样是Man这个方法 public int Man(int age,int name) { …… } //重载 public int Man(int age) { …… } 重载的存在可以在主函数调用类的时候,根据对象所需灵活调用,是一种经常会使用到的方法. 方法的隐藏: 当子类与父类拥有完全一样的方法时,便隐藏了父类的同名方法. 如果是有意隐藏,应该在相同的方法中写上new关键字,如: class Parent {

虚方法,重写————继承、多态、面向对象!

1. this 不能直接调用 非static成员class A{static public void M1(){ Hello(); // 错误 在static成员中不能 直接调用非static成员 A a=new A(); a.Hello();}public void Hello(){ F1 =10: M1(); A.M1(); this.M1() //错误 不能调用}} 2. 静态类不能new: 静态类中不能声明非静态成员. 3.sealed 密闭类不能被继承 Fromwork 4.Paint

多态之虚方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { Chinese c1 = new Chinese("韩梅梅"); Chinese c2 = n

c#多态之抽象类与虚方法的异同点~

多态之抽象类与虚方法的相似点及不同点 : 不同点 1.方法关键字不一样 虚方法的方法关键字是:virtual. 抽象类的方法关键词是:abstract 2.基类的方法是否有方法体/实现 虚方法的方法:声明并实现方法. 抽象类的方法:只作声明,无方法体/无实现. 共同点 1.子类/派生类都要重写父类的方法:关键字overcode 其他的暂时未想到,笔记先分享到这里!欢迎各位大神评论.纠错.及补充!O(∩_∩)O谢谢.

c++第八章-(虚方法与抽象方法)

1.虚方法(Virsual Method) 虚方法是继承的,一旦在基类里把某个方法声明为虚方法,在子类里就不可能再把它声明为一个非虚方法了. 在基类里把所有的方法都声明为虚方法会让最终生成的可执行代码的速度变得稍微慢一些,但好处是可以一劳永逸地确保程序的行为符合你的预期. 析构器都是虚方法!从编译的角度看,他们只是普通的方法.如果他们不是虚方法,编译器就会根据他们在编译时的类型而调用那个在基类里定义的版本(构造器),那样往往会导致内存泄露! class Pet { public: Pet(std

抽象方法和虚方法 与设计模式

一.概念 抽象方法和虚方法是什么?先写一段代码看看他们俩的区别. 抽象方法使用abstract关键字:虚方法使用virtaul关键字. <span style="font-size:18px;">//抽象方法 Public abstract class TestPaper { Public abstract Answer(): } </span> <span style="font-size:18px;">//虚方法 Public

多态、虚方法、重写

多态: 同样都是继承了同一个父类,但是父类中的方法并不使用任何一个子类,那么在这就需要子类重新编写这个方法的主体 1.需要父类同意子类可以重新编写自己的方法,virtual - 虚方法 2.子类只能重写父类允许重写的方法,只能重写虚方法,override - 重写覆盖虚方法 所有的类都可以当做父类,都可以有虚方法 Program   类 using System; using System.Collections.Generic; using System.Linq; using System.

C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)

9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多态,一种是运行时多态. 方法重载: 方法重载就是,多个方法拥有相同的方法名称,而参数个数或类型不同. 下面就是一个多态的例子,可以看到方法名称“BedRoom”被用到了2个方法中,就是2个方法有共同的方法名称"BedRoom",但是2个方法的参数是不同的. 1 class HouseOwn