C#等效于Delphi的“类”函数/过程

时间:2018-10-25 06:37:46

标签: c# class delphi inheritance comparison

我已经进行了一些搜索,但似乎无法找到与此问题完全匹配的内容。如果我错过了,请重定向我。

在Delphi / Object Pascal中,您有两个概念:

  1. Class Method-允许您在不需要类实例的情况下调用该方法。但是,这些方法仍然允许在派生类中进行重写(因此以某种方式仍携带一些类信息)。
  2. 静态方法-将方法标记为静态-因此不再允许使用虚拟/替代关键字-没有类信息/没有继承“知识”

*您可以在上面纠正我。

问题:在C#中,Delphi的类方法(不是静态的)等效吗?我希望能够声明一个无需类实例即可调用的方法-但是我希望能够将基本方法标记为虚方法并在派生类中覆盖它

3 个答案:

答案 0 :(得分:3)

  

类方法-允许您调用该方法而无需   类实例。但是,这些方法仍然允许覆盖   派生类(因此在某种程度上仍带有某些类   信息)。

确定吗?

无论如何,我们拥有的最接近的东西是带有静态方法的类。

public class MyLovelyHorse
{
    public static int HowManyLegs()
    {
        return 4;
    }
}
  

但是我希望能够将基本方法标记为虚   在派生类中覆盖它

对不起,没有办法。 C#中没有工具可以执行此操作。

这是您可能应该参观Classes and Structs (C# Programming Guide)

的时间

答案 1 :(得分:1)

在C#中无法做到这一点-思想是静态方法总是针对特定类型调用的,永远不会有实例。这是不正确的,因为您可以将派生类的类型信息传递给采用基本类类型的函数...

如果函数不应该做任何花哨的事情(例如,它仅返回静态值),则可以使用类属性而不是虚拟静态方法来摆脱困境。

答案 2 :(得分:0)

Delphi和C#有一些相似之处。它们都不支持多重继承。

遇到问题时,对于打算隐藏基类的方法实现的方法,可以使用new关键字。

Delphi中的静态方法与C#相同。您不能覆盖静态方法。如果您希望强制执行相同的操作,则C#还附带了static(密封)(对于类)关键字。