C#部分类与部分方法

部分类也可以定义部分方法。部分方法在部分类中定义,但没有方法体,在另一个部分类中执行。在这两个部分类中,都要使用partial关键字。

public partial class MyClass
{
partial void MyPartialMethod();
}

public partial class MyClass
{
partial void MyPartialMethod()
{
// Method implementation
}
}

部分方法也可以是静态的,但它们总是私有的,且不能有返回值。它们使用的任何参数都不能是out参数,但可以是ref参数。部分方法还不能使用virtual、abstract、override、new、sealed和extern修饰符。

有了这些限制,就不太容易看出部分方法的作用了。实际上,部分方法在编译代码时非常重要,其用法倒并不重要。考虑下面的代码:

public partial class MyClass
{
partial void DoSomethingElse();
public void DoSomething()
{
Console.WriteLine(“DoSomething() execution started.”);
DoSomethingElse();
Console.WriteLine(“DoSomething() execution finished.”);
}
}

public partial class MyClass
{
partial void DoSomethingElse()
{
Console.WriteLine(“DoSomethingElse() called.”);
}
}

这段代码定义了部分方法DoSomethingElse,在第一个部分类中定义,在第二个部分类中执行。在控制台应用程序中调用DoSomething时,输出如下所示:

DoSomething() execution started.

DoSomethingElse() called.

DoSomething() execution finished.

如果删除第二个部分类定义,或者删除部分方法的全部执行代码(注释掉代码),输出就如下所示:

DoSomething() execution started.

DoSomething() execution finished.


者可能认为,调用DoSomethingElse时,运行库发现该方法没有执行代码,因此会继续执行下一行代码。但实际上,编译代码时,如果代码包含一个
没有执行代码的部分方法,编译器会完全删除该方法,还会删除对该方法的所有调用。执行代码时,不会检查执行代码,因为没有检查方法的调用。这会略微提高性
能。

与部分类一样,在定制自动生成的代码或设计器创建的代码时,部分方法是很有用的。设计器会声明部分方法,用户根据具体情形选择是否执行它。如果不执行它,就不会影响性能,因为该方法在编译过的代码中不存在。

现在考虑为什么部分方法不能有返回类型。如果可以回答这个问题,就可以确保完全理解了这个主题,我们将此留作练习。

原文链接

时间: 2024-10-13 10:50:34

C#部分类与部分方法的相关文章

C# 部分类 和 部分方法

有一次面试的时候,面试官问我,知道部分类吗? 我说知道,用partial 关键字修饰的类就是部分类 他问,你知道为什么要有部分类吗? 我愣着了,这个问题我没想过,而且平时的时候都没怎么用到过部分类,我答不上来.. 现在我查阅资料了解了一下,下面分享一下我认识的部分类. 部分类是用partial声明的类,它允许我们把一个类分割成两个或多个类,当应用程序编译的完成的时候,多个部分类会结合成一个类,同时partial关键字也可以用于声明结构和接口. 那么下面问题来了,为什么要有部分类呢? 既然微软创造

部分类、静态类、Object类、ToString()方法、扩展方法的使用

部分类.静态类.Object类.ToString()方法.扩展方法的使用 一:部分类: 前言:partial关键字允许将类.结构.方法或者接口放在多个文件中.一般情况下,一个类全部驻留在单个文件中.但有时,多个开发人员需要访问同一类的时候,或者某种类型的代码生成器生成了一个类的某部分.所以把类放在多个文件中是有益的. 如果声明类时使用了下面的关键字.这些关键字就必须应用于同一个类中的所有的部分: public  private  protected  internal  abstract  se

C#语言基础知识(5):Partial Class部分类

Partial Class,部分类 或者分布类.顾名思义,就是将一个类分成多个部分.比如说:一个类中有3个方法,在VS 2005将该类中3个方法分别存放在3个不同的.cs文件中.这样做的好处:1.一个大型的项目类可以同时分成不同的区块交由不同的程序员拽写,同时进行.2.若由系统自动产生的source,可以用独立的Partial Class加入,而不必更改到原先类.3.当类(Class)很大时,可以用Partial Class做功能性划分,这也是一种不错的分类方式. 如果您在开发项目的公用函数库,

c#部分类

c#提供了一个部分类,它只显示类的一部分,用关键字partical修饰 using System; public partial class Course { public int Id { get; set; } public string Name { get; set; } public double Points { get; set; } } public partial class Course { public void PrintCoures() { Console.WriteL

C# 部分类使用partial修饰

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace patial { class Program { static void Main(string[] args) { Student s = new Student(); s.Method2(); Console.ReadKey(); } } public partial class Student { p

密封类和部分类

1.密封类 sealed关键字修饰class类,不能被继承. 2. 部分类 partial关键字修饰class类,可以在同一个命名空间内使用相同名字的类,相当于把一个类拆成多个类来写. using System; using System.Collections; using System.Collections.Generic; namespace Dome { class person { static void Main(string[] args) { renlei s = new re

.Net学习笔记----2015-06-29(序列化和反序列化、部分类、密封类、重写ToString)

序列化: 就是将对象转换为二进制 反序列化: 将二进制转换为对象 他们的作用是传输数据. 序列化: (1).将这个类标记为可以被序列化的.在类的前面加[Serializable] 部分类: partial 放在类前面,public partial class Person 密封类: sealed,不能被继承,但是可以继承于其他类 连续熬夜有点精神不佳,真是老了....

partial部分类

<> using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace partial部分类 { //这两个Person(部分类)构成了一个完成的类 为什么要有部分类:就在联合开发的过程中,每个人都有对这个Person类开发的权利.每个人都需要用.所有就需要有部分类 public partial class Person { public string Name { g

Intellij IDEA设置忽略部分类编译错误

有些时候我们的项目中有些错误,但这些错误并不影响项目的整体运行(或许是没有使用到),默认情况下idea是无法通过编译的,因此也就无法部署运行,要达到正确运行项目的目的需要作一些设置才行. 设置Intellij IDEA忽略部分类编译错误 设置很简单,只需要两步即可. 1.设置Java编译器 如上图所示,Ctrl+Alt+S快捷键打开"Settings"对话框,找到设置中的"Java Compiler"设置,将"User compiler"设置由&