基本上我想知道的是,如果有任何方法可以将基于.net的语言添加新的“语句”? 我正在寻找的一个例子就像是介绍public class MyClass decoratorOf ClassWithLotsOfMethods
,在预编译的时候将它改为一个普通的类,它默认覆盖了所有的东西,但是我定义的方法。扩展C#语言?
另一个例子是在.NET 3.5自动属性,或扩展方法等
这仅仅是为了好玩,不是我真的想这样做,只是好奇,如果有可能
谢谢! Seba
基本上我想知道的是,如果有任何方法可以将基于.net的语言添加新的“语句”? 我正在寻找的一个例子就像是介绍public class MyClass decoratorOf ClassWithLotsOfMethods
,在预编译的时候将它改为一个普通的类,它默认覆盖了所有的东西,但是我定义的方法。扩展C#语言?
另一个例子是在.NET 3.5自动属性,或扩展方法等
这仅仅是为了好玩,不是我真的想这样做,只是好奇,如果有可能
谢谢! Seba
没有什么内置的。
你当然可以使用预处理器,但不会让你受欢迎。
是的,看看Simula - 他们所做的只是发明了对象 - 面向程序设计或C++ - 这不是很受欢迎,是吗? :-) – Ken 2010-10-19 14:51:30
@Ken:如何添加预处理器让他受欢迎?这与Simula(它实际上不是ALGOL的延伸)有什么关系? – 2010-10-19 19:23:48
我认为没有理由相信预处理器的使用会对人气造成任何特别的影响,因为有很多非常流行和不受欢迎的好例子。并且(如果我在互联网上发现了十几个独立的历史记录),Simula开始作为Algol的预处理器(因为C++开始作为C的预处理器的生命),尽管(就像C++一样),它很快就发生了它的生命拥有。 – Ken 2010-10-20 05:14:49
不,我知道,但看看PostSharp和T4 Templates,看看是否能解决你的问题:)
我已经用T4构建了装饰器。它运行良好,并且不需要任何额外的安装 – 2010-10-19 14:14:23
T4将是我的第一选择。 – 2010-10-19 14:19:59
听起来像你想的我会的方式像扩展方法一样工作 - 如果Foo被声明为Bar的扩展类,那么声明为Foo的对象将被视为Bar,除了无条件地编译时处理Foo的自静态方法和属性影响Bar的那些(即使Bar中存在相应的方法)。这样的设计将允许成员添加到Bar而不破坏使用Foo的代码,即使这些成员与Foo的扩展名相匹配。太糟糕了,我不知道有什么办法让语言支持。 – supercat 2010-10-19 14:59:11
@supercat:你应该看一看[Scala implicits](http://www.artima.com/weblogs/viewpost.jsp?thread=179766) – 2010-10-19 15:40:21