定义静态 .New() 方法时在 IronRuby 中创建 .NET 对象
当类上定义了静态 .New() 方法时,似乎不可能使用其默认构造函数创建对象:
.NET 类:
public class Tester
{
public static void New()
{
Console.WriteLine("In Tester.New()");
}
public Tester()
{
Console.WriteLine("In constructor");
}
}
IronRuby 代码:
Tester.new
Tester.New
这两种情况行调用 Tester.New(),而不是构造函数。调用Tester类的构造函数似乎是不可能的。
有解决方法吗,或者这是一个错误?
It seems impossible to create an object using its default constructor when there is a static .New() method defined on the class:
.NET class:
public class Tester
{
public static void New()
{
Console.WriteLine("In Tester.New()");
}
public Tester()
{
Console.WriteLine("In constructor");
}
}
IronRuby code:
Tester.new
Tester.New
Both of these lines call Tester.New(), not the constuctor. It seems impossible to call the constructor of the Tester class.
Is there a workaround, or is this a bug?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
第一个只是不可避免的歧义。如果您想让 CLI 类看起来像 Ruby 类,您别无选择,只能将构造函数映射到
new
方法。因此,如果您同时拥有一个 realnew
方法和一个映射到构造函数的合成方法,无论您做什么,合成方法都会掩盖真实方法,或者相反大约。无论哪种方式,你都会输。这就是为什么所有 CLI 类都有一个合成的 clr_new 方法:
The first one is just an unavoidable ambiguity. If you want to make CLI classes look like Ruby classes, you have no choice but to map the constructor to a
new
method. So, if you have both a realnew
method and a synthesized one which maps to a constructor, whatever you do, either the synthetic method shadows the real one or the other way around. Either way, you lose.That's why all CLI classes have a synthetic
clr_new
method: