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