Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VB.NET中从派生类的基类中抑制属性或方法?_.net_Vb.net_Oop - Fatal编程技术网

如何在VB.NET中从派生类的基类中抑制属性或方法?

如何在VB.NET中从派生类的基类中抑制属性或方法?,.net,vb.net,oop,.net,Vb.net,Oop,超基类 Public Class airplane Private var_num_seats As Integer Private var_num_engines As Integer Protected Property num_seats As Integer Get Return var_num_seats End Get Set(ByVal param_num_seats As Integer) var_num_seats =

超基类

Public Class airplane

Private var_num_seats As Integer
Private var_num_engines As Integer

Protected Property num_seats As Integer
    Get
        Return var_num_seats
    End Get
    Set(ByVal param_num_seats As Integer)
        var_num_seats = param_num_seats
    End Set
End Property

Protected Friend Property num_engines As Integer
    Get
        Return var_num_engines

    End Get
    Set(ByVal param_num_engines As Integer)
        var_num_engines = param_num_engines
    End Set
End Property

Protected Friend Sub take_off()
    'Do take off tasks
End Sub

Protected Friend Sub start_engines()
    'start each engine
End Sub

End Class
还有一个儿童班

Public Class glider
Inherits airplane

Private var_towed As Boolean
Private var_glide_rate As Double

Public ReadOnly Property towed As Boolean
    Get
        Return var_towed
    End Get
End Property

Public ReadOnly Property glide_rate As Double
    Get
        Return var_glide_rate
    End Get
End Property

Public Sub to_glide()
    'do gliding
End Sub

End Class
显然,我不希望Glider类具有方法“start\u engines”或属性“num\u engines”。否则,其他子类可能会有。如何在子类中抑制这些属性和方法,而不仅仅是忽略(如果可以的话)


谢谢

我怀疑你想使用界面


你不能

原因:打破了对象的导向性

假设你有:

public void ThisIsAMethod(Airplane plane)
{
    plane.start_engines();
}
现在您可以这样使用它:

Airplane aPlane = new Glider();
ThisIsAMethod(aPlane);
哦,不,aPlane实际上是一种滑翔机,因此你不应该称它为滑翔机。然而,它是一架飞机,因此有方法

解决方案:

  • 形成真正的继承。滑翔机不是飞机。也许你可以为“FlyingMachine”或“WingedFlier”或它们都扩展的东西创建一个基类
  • 黑客模式!滑翔机:

    受保护的朋友子启动引擎() 抛出新的NotSupportedException() 端接头


  • 多个感叹号肯定是精神不正常的标志。回答时我真的很兴奋;)+0.49. 任何飞机都应该能够
    启动引擎()
    ,而不必担心操作不受支持,因为它是接口的一部分。(不过,请注意,
    start_engines()
    不一定要做任何事情,除了让飞机做好移动准备。没有发动机启动的滑翔机可以返回。)同样地,
    num_engines
    也可以始终返回0。(无论如何,它应该是只读的或“专用设置”!飞机不应该改变它们的引擎数量。)但是,是的,如果滑翔机的使用方式与飞机不同,那么就不应该从另一个滑翔机继承。是的,我认为在类的概念设计方面存在问题。我只是想知道这是否可能。有趣的是。。。在界面中,我不应该声明start_engines和num_engines,这样就可以避免该操作了?我已经有一段时间没有在VB代码中使用我的头脑了,我将不得不就此与您联系。