nat*_*ati 1 c# abstract-class method-hiding
我试图更好地理解c#中的抽象类.
我知道在抽象类中你必须覆盖抽象方法并且可以覆盖虚方法.
我的问题是:
我可以覆盖非虚拟方法吗?(我知道通常我不能 - 但也许抽象类不同?)或者它会隐藏吗?
另外,正如我在这里读到的如何强制调用C#派生方法(第一个答案) - 在我看来,因为非虚拟方法在编译时静态链接而且无法更改 - 我无法调用方法在派生类中,从来没有?如果是这样 - 隐藏方法有什么意义?
Eri*_*ert 13
我试图更好地理解c#中的抽象类.
好的,然后让我们纠正你的错误,因为你对这里的抽象类有一些完全错误的想法.
我知道在抽象类中你必须覆盖抽象方法并且可以覆盖虚方法.
绝对不; 那句话的第一部分是完全错误的.抽象类中没有任何要求可以覆盖抽象方法.
非抽象类称为具体类.真正的规则是:
这应该是有道理的:在实现每个抽象方法之前,你不能创建具体类的实例; 否则你可以调用一个没有实现的方法,那会很糟糕.
我可以覆盖非虚拟方法吗?
不可以.您可以重载非虚方法,也可以隐藏现有的非虚方法,但不能覆盖它们.
在我看来,因为非虚拟方法在编译时静态链接而且无法更改 - 我无法在派生类中调用方法,从不?
当然不是.通过将接收器转换为派生类来调用派生类的方法.
隐藏方法有什么意义?
重复:
这是你没有问过的奖金问题.看看你是否可以回答它.
方法可以标记为抽象和覆盖吗?如果不是,为什么不呢?如果是的话,举个例子说明你想要的原因.
如果你能正确回答这个问题,那么你可能对抽象方法有了很好的理解.解决方案就在这里.
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |