为什么我需要c#中的分部类和虚方法

本文关键字:方法 为什么 | 更新日期: 2023-09-27 18:12:21

我有一个问题,为什么在c#中有partial类和virtual方法?

我的意思是,当我有一个正常的或抽象的类,然后从它继承或使它部分的区别是什么?

另一个问题是为什么我需要虚方法?当我从一个类继承时,如果我想,我也可以重写这个方法。

为什么我需要c#中的分部类和虚方法

局部类:它们主要允许在编译时将机器生成的代码与手动生成的代码组合在一起,以避免滥用继承等。它可以用于其他原因,但这是它们的主要目的。不要再在源文件中添加"不要编辑此位-它属于设计器"等内容。

虚方法:不,如果成员没有在基类中声明为虚(或抽象),则不能重写。你可以阴影它与new,但这是不是相同的覆盖它-新方法将不会被调用多态

部分类和方法允许您将代码分散到不同的文件中。当您使用代码生成时,这很有用——生成的代码在一个文件中,可以毫无问题地覆盖,其余代码可以安全地更改。

对于c#中的virtual -,如果你想重写一个方法,必须在基类中使用virtual(或abstract),在重写类中使用override。如果没有它们,你不能简单地重写。

如果你不使用virtual/abstractoverride,你就有隐藏/遮蔽方法的危险,这可能是你想要的,也可能不是。使用virtual/abstractoverride使事情更明确和可预测。

  1. 部分类允许你在多个文件中拆分类定义,这在某些情况下是实用的。
  2. 没有;只有在基类中标记为virtual的方法才能重写。如果基类的方法不是virtual,而你在子类中创建了一个同名的方法,你就创建了一个全新的、不相关的方法。

部分类允许您在多个文件中拆分类定义。

可以使用关键字override重写虚方法。如果方法未定义为virtual,则只能使用new关键字将其隐藏在子类中。

我想你可以在任何c# 101材料中读到这些。看一下MSDN库

分部类允许您在多个声明中定义相同的类,这些声明通常也在不同的文件中。如:

public partial class MyClass{
   public void MethodOne(){}
}
public partial class MyClass{
   public void MethodTwo(){}
}
如果基类的子类有能力覆盖虚方法,则可以使用虚方法。如果子类必须覆盖该方法,则使用抽象。
public class MyBaseClass{
  public virtual void MethodOne(){} // CAN be overridden...
  public abstract void MethodTwo(){} // MUST be overridden.
}

部分类对于在同一项目的多个文件中划分单个类很有用。这对于为您生成代码的工具(如windows form或WPF)非常有用。例如,部分类允许您在一个文件中编写代码,而让IDE在另一个文件中编写代码。

关于virtual和override,请看另一个线程:为什么我们使用virtual和override?