定义静态 .New() 方法时在 IronRuby 中创建 .NET 对象

发布于 2024-09-07 17:28:22 字数 502 浏览 2 评论 0原文

当类上定义了静态 .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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

日久见人心 2024-09-14 17:28:22

第一个只是不可避免的歧义。如果您想让 CLI 类看起来像 Ruby 类,您别无选择,只能将构造函数映射到 new 方法。因此,如果您同时拥有一个 real new 方法和一个映射到构造函数的合成方法,无论您做什么,合成方法都会掩盖真实方法,或者相反大约。无论哪种方式,你都会输。

这就是为什么所有 CLI 类都有一个合成的 clr_new 方法:

Tester.clr_new
# In constructor

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 real new 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:

Tester.clr_new
# In constructor
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文