Asp.net 多态性与枚举
假设我有这样一个类结构:Asp.net 多态性与枚举,asp.net,.net,vb.net,Asp.net,.net,Vb.net,假设我有这样一个类结构: Public Class Student Public Enum Days Monday Tuesday Wednesday Thursday End Enum Public _Day As Days Public Shared Function Factory(ByVal StudentType As String, ByVal day As Days) As Stu
Public Class Student
Public Enum Days
Monday
Tuesday
Wednesday
Thursday
End Enum
Public _Day As Days
Public Shared Function Factory(ByVal StudentType As String, ByVal day As Days) As Student
If StudentType = "PostGraduate" Then
Return New PostGraduate(day)
Else
Return New Undergraduate(day)
End If
End Function
End Class
Public Class PostGraduate
Inherits Student
Public Sub New(ByVal day As Days)
End Sub
End Class
Public Class Undergraduate
Inherits Student
Public Sub New(ByVal day As Days)
_Day = day
End Sub
End Class
只有本科类使用enum,但是必须在超类(Student)中声明enum,因为工厂方法需要向它传递一天。有没有一种方法可以让我把枚举放在本科班上?很遗憾,您无法从枚举继承。如果
不需要使用天
,则取出构造函数天
参数,但将天
初始化为默认值
这带来了另一个非常重要的问题:为枚举使用默认的0值,例如Unknown、NotSet或其他。枚举只是一种美化的int
s,如果不初始化它们,它们从0开始,在您的例子中,这意味着天。星期一
。。。那不是你想要的
您还应该将您的\u Day
属性设置为public
get但protected
集(对不起,我不记得VB关键字,基本上它只能由自身和派生类设置)。为什么不能将枚举与学生分开?Day与学生无关。目前的设置对我来说似乎很好,为什么您特别希望它仅限于本科生
?你认为它会给你带来什么实际好处?不管怎样,本科生
实际上是一种学生类型,加上你对学生
的所有派生都有一个新的
方法,该方法需要天
参数,因此将其仅限于本科生
@James是没有意义的,谢谢。我用上面的例子来解释这个问题。枚举仅与实际系统中的子类相关。如果enum
仅特定于本科生
,则存在设计问题。我建议从工厂方法中删除Days
参数,或者改用属性注入。SOLID Principles->Liskov Substitution Principle->“程序中的对象应该可以用其子类型的实例替换,而不会改变该程序的正确性。”