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->“程序中的对象应该可以用其子类型的实例替换,而不会改变该程序的正确性。”