(原创)c#学习笔记10--定义类成员05--部分方法定义
2015-11-16 16:09
591 查看
[b]10.5 部分方法定义 [/b]
部分类也可以定义部分方法。部分方法在部分类中定义,但没有方法体,在另一个部分类中包含实现代码。在这两个部分类中,都要使用partial关键字。
部分方法也可以是静态的,但它们总是私有的,且不能有返回值。它们使用的任何参数都不能是out参数, 但可以是ref参数。 部分方法也不能使用virtual、 abstract、 override、 new、 sealed和extern修饰符。
有了这些限制,就不太容易看出部分方法的作用了。实际上,部分方法在编译代码时非常重要,其用法倒并不重要。考虑下面的代码:
在第一个部分类定义中定义和调用部分方法 DoSomethingElse,在第二个部分类中实现它。在控制台应用程序中调用DoSomething时,输出如下内容:
如果删除第二个部分类定义,或者删除部分方法的全部执行代码(注释掉代码),输出就如下所示:
读者可能认为,调用 DoSomethingElse 时,运行库发现该方法没有实现代码,因此会继续执行下一行代码。但实际上,编译代码时,如果代码包含一个没有实现代码的部份方法,编译器会完全删除该方法,还会删除对该方法的所有调用。执行代码时,不会检查实现代码,因为没有检查方法的调用。这会略微提高性能。
与部分类一样,在定制自动生成的代码或设计器创建的代码时,部分方法是很有用的。设计器会声明部分方法,用户根据具体情形选择是否实现它。如果不实现它,就不会影响性能,因为该方法在编译过的代码中不存在。
现在考虑为什么部分方法不能有返回类型。如果可以回答这个问题,就可以确保完全理解了这个主题,我们将此留作练习。
部分类也可以定义部分方法。部分方法在部分类中定义,但没有方法体,在另一个部分类中包含实现代码。在这两个部分类中,都要使用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 时,运行库发现该方法没有实现代码,因此会继续执行下一行代码。但实际上,编译代码时,如果代码包含一个没有实现代码的部份方法,编译器会完全删除该方法,还会删除对该方法的所有调用。执行代码时,不会检查实现代码,因为没有检查方法的调用。这会略微提高性能。
与部分类一样,在定制自动生成的代码或设计器创建的代码时,部分方法是很有用的。设计器会声明部分方法,用户根据具体情形选择是否实现它。如果不实现它,就不会影响性能,因为该方法在编译过的代码中不存在。
现在考虑为什么部分方法不能有返回类型。如果可以回答这个问题,就可以确保完全理解了这个主题,我们将此留作练习。
相关文章推荐
- C#位运算讲解与示例[转]
- (原创)c#学习笔记10--定义类成员04--部分类定义
- C#委托的介绍(delegate、Action、Func、predicate)
- C#稳固基础:传统遍历与迭代器
- C#集合之STACK
- C# 计算时间差 用timespan函数
- C# 获取当前文件名、执行函数、执行代码行数和列数
- C# Stopwatch
- C# 中? 和 ?? 在变量中的使用
- c# delegate的invoke和bejinInvoke的区别
- C#编程实现DataTable添加行的方法
- C#基于委托实现多线程之间操作的方法
- C#编程实现获取文件夹中所有文件的文件名
- C#实现把图片下载到服务器代码
- 根据网址把图片下载到服务器C#代码
- C#实现把图片下载到服务器代码
- C# DBHelper类 参考(两个)
- c#学习第二天
- C# ajax 文件提交
- Jamil+c#—实现邮件的发送