C#中部分方法的各种限制

1、C#中部分方法总是私有的?

假如你是类的设计者,设计出某个部分类如MyClass。当你把这个类设计完后,别人就可以用这个类。

对于类的使用者来说,类的外观就是各种public的属性、字段和方法。

假如,你在MyClass中定义了一个部分方法SendFile用来传输文件,但是你没有提供这个方法的实现代码。

现在类的使用者知道MyClass类中有个public方法SendFile可以用来传输文件,他并不知道这个方法是不是部分方法。

他以为这个方法肯定可以使用,而你却没有提供实现代码!

人家会以为文件正常传输了,但是其实他被你“欺骗了”。

所以,为了导致这种悲剧发生,就让部分方法都定义为private的。

结果就是,即使这种欺骗行为再次发生,那也是自己骗自己,不会欺骗类的使用者。

客户是上帝。


2、C#中部分方法的参数必须是ref参数,而不能是out参数?

我们可以把类中的方法看成是一个机器,我们可以用这个机器帮我做某些事情。

对于out参数,就好像是我们在对这个机器说“嘿,帮我生产一个东西,我下面需要用”。

注意out参数可以在使用之前未赋值,只是声明了而已。

而一个只声明却未赋值的变量,是不会存在内存中的。

只有当赋值后,才会把这个变量压入栈中。

这意味着,你坚定,这台机器肯定存在,肯定能运作,肯定能帮你生产出你想要的东西,接着你又会放心地使用机器生产出来的东西。

结果悲剧了,你用的是部分方法,且这个部分方法没有被实现。

也就是说,你用了一个根本不存在的机器,尝试生产一个根本不存在的东西,还被你反复地用来用去。

在代码中,就是在操作一个根本不存在的变量。

这可以么?当然不可以。

但是,如果这个参数是ref的,这倒没什么问题,如果是ref,那么首先意味着这个变量是存在的。

依然把方法看成机器。

现在你是让机器帮你加工下,而不是生产。

即使这个机器不帮你加工也没事,我这个物品还是存在的,当我下面继续使用这个物品时,不会再出现“操作一个根本不存在的物品”这个悲剧了。


3、部分方法不能用virtual、abstract、override、new、sealed和extern修饰符

拿virtual来说

如果一个部分方法是虚拟的,意味着派生类可以重写这个部分方法。

重写一个方法,就要用到关键字override

结果,你没有实现这个部分方法

那么当编译器在编译程序时,会因未找到部分方法的方法体而删除这个方法。

意味着基类中不存在某个虚拟方法

而你还在基类中悠哉地使用override关键字来重写那个已经被删除的方法。

肯定不让你通过编译。

其他的类似。


4、为什么部分方法不能有返回值

原因和out参数是一样的,你期待这个机器给你生产出个东西,但是没有,而你接着却用了某个不存在的东西。


5、总结:

为什么要给部分方法设置这么多条件。

一句话概括:怕你用了根本不存在东西!!!

C#中部分方法的各种限制

上一篇:Delphi 初始化的顺序


下一篇:C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法