问题描述
C#声明一个扩展方法,必须是staticclass,static方法。我尝试把这个包含了扩展方法的类放在一个类的内部,结果编译出错了。为什么C#在语法上要有这样的限定呢?
解决方案
解决方案二:
语法要求,没啥好解释的……至于为什么,这个你得问微软了,一般谁没事去研究这东西,我们又不去开发一个语言
解决方案三:
语法本来就这么规定的,扩展方法必须是静态方法,所在类必须是静态类。
解决方案四:
就是这么规定的
解决方案五:
扩展方法本来就是给已经有的类增加功能,如果放到内部找起来就太费事了,楼主设计的什么功能如此见不得光啊
解决方案六:
扩展方法的那个静态类的命名空间和要被扩展的类命名空间不同吧?
解决方案七:
扩展方法的原意就是要‘扩展’已有的类,它不可以,也不能,改变已有类的逻辑。它只是用来方便代码的。也就是说,扩展方法可以做到了,不用扩展方法,也必须可以做到。但是,根据访问规则,内部类可以访问外部类的私有成员。如果允许在内部类里面声明一个扩展方法,那么该扩展方法可能成为内鬼。内鬼可以做到的,不用扩展方法就做不到,这种矛盾违背了程序员对‘扩展方法’的期待。publicclassCustomer{publicstringId{get;privateset;}publicstringAddress{get;set;}publicCustomer(stringid){Id=id;}publicstaticclassCustomerExtensions{publicstaticCustomerSetAddress(/*this*/Customercustomer,stringaddrress){customer.Id="newid";//内部类可以访问定义在外部的私有成员。customer.Address=addrress;returncustomer;}}}
解决方案八:
嗯,正如上面几位所说,如果你可以去随便修改别人的源代码(例如任何程序随时都去修改System.Core.dll中的某些代码),你就不需要扩展方法了。反之,如果你自己的程序中的普通类,那么也没有必要使用扩展方法。
解决方案九:
扩展方法的逻辑定义部分“找起来”很困难(相对于平铺直叙的普通方法而言),实际上不会因为语法时髦就滥用。扩展方法显然是增加了阅读困难度的,因此现在应该被谨慎地限制在最直观最傻瓜化的地方来定义。而问“为什么不可以随便声明”,则是过度滥用它了。