托管 C++ 中的接口类

发布于 2024-07-15 01:37:15 字数 497 浏览 10 评论 0原文

托管 C++ 中的接口对我来说看起来有点奇怪,因为它们允许在其中使用静态方法和成员。 例如,以下是有效的 MC++ 接口。

interface class statinterface
{
    static int j;
    void Method1();
    void Method2();

    static void Method3()
    {
        Console::WriteLine("Inside Method 3");
    }

    static statinterface()
    {
        j = 4;
    }
};

好吧,我的问题是接口中静态方法有什么用。 虚拟表发生了什么等。实现该接口的类的虚拟表是什么。 我想到了很多问题。 这种类型的类,即接口类,并不等同于普通的抽象类,因为我们不能在这里定义非静态方法。

我只是想知道在界面中允许静态的明智之举。 在我看来,这肯定违反 OOP 原则。

The interfaces in Managed C++ looka bit strange to me since they allow static methods and members inside them. For example, following is a valid MC++ interface.

interface class statinterface
{
    static int j;
    void Method1();
    void Method2();

    static void Method3()
    {
        Console::WriteLine("Inside Method 3");
    }

    static statinterface()
    {
        j = 4;
    }
};

Well, my question is that what is the use of static methods in an interface. And what happened to virtual tables etc. What will be the virtual table of the classes implementing this interface. There are lots of questions that come to mind. This type of class i.e., interface class is not equivalent to a plain abstract class since we can't have definition of non-static methods here.

I just want to know the wisdom of allowing statics in interface. This is certainly against OOP principles IMO.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

追风人 2024-07-22 01:37:15

回答这个问题的最简单方法是使用 .NET Reflector 来检查从代码生成的程序集。

VTable 只包含虚拟函数,因此不会包含静态数据。

该语言称为 C++/CLI,而不是托管 C++(早在 2002 年,这就是糟糕的事情)。

这与 OOP 原则无关,无论如何,OOP 原则最初从未包含纯接口的概念。

The easiest way to answer this question is to use .NET Reflector to examine the assembly generated from the code.

A VTable only ever contains virtual functions, so statics simply wouldn't be included.

The language is called C++/CLI, not Managed C++ (that was something bad from way back in 2002).

This has nothing to do with OOP principles, which originally never included the concept of a pure interface anyway.

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