C# 在GUI中使用许多从基继承的类

C# 在GUI中使用许多从基继承的类,c#,vb.net,class,abstract-class,C#,Vb.net,Class,Abstract Class,我的课程设置与此类似: <DataContract()> _ Public MustInherit Class SystemTaskProcessBase Public MustOverride ReadOnly Property Name() As String Public MustOverride ReadOnly Property Description() As String Public MustOverride Property Result

我的课程设置与此类似:

<DataContract()> _
Public MustInherit Class SystemTaskProcessBase

    Public MustOverride ReadOnly Property Name() As String
    Public MustOverride ReadOnly Property Description() As String

    Public MustOverride Property Result() As SystemTaskResult

    <DataMember()> _
    Private _TaskID As Integer = 0
    Public Property TaskID() As Integer
        Get
            Return _TaskID
        End Get
        Set(ByVal value As Integer)
            _TaskID = value
        End Set
    End Property

End Class

<DataContract()> _
Public Class RebootSystemTaskProcess
    Inherits SystemTaskProcessBase

    Private _Name As String = "Reboot System"
    Public Overrides ReadOnly Property Name() As String
        Get
            Return _Name
        End Get
    End Property

    Private _Description As String = "Task for the client to reboot itself internally."
    Public Overrides ReadOnly Property Description() As String
        Get
            Return _Description
        End Get
    End Property

    <DataMember()> _
    Public _Result As SystemTaskResult = SystemTaskResult.NotProcessed
    Public Overrides Property Result() As SystemTaskResult
        Get
            Return _Result
        End Get
        Set(ByVal value As SystemTaskResult)
            _Result = value
        End Set
    End Property

End Class

<DataContract()> _
Public Class DeleteFileSystemTaskProcess
    Inherits SystemTaskProcessBase

    Private _Name As String = "Delete File"
    Public Overrides ReadOnly Property Name() As String
        Get
            Return _Name
        End Get
    End Property

    Private _Description As String = "Task for the client to delete a local file."
    Public Overrides ReadOnly Property Description() As String
        Get
            Return _Description
        End Get
    End Property

    <DataMember()> _
    Public _Result As SystemTaskResult = SystemTaskResult.NotProcessed
    Public Overrides Property Result() As SystemTaskResult
        Get
            Return _Result
        End Get
        Set(ByVal value As SystemTaskResult)
            _Result = value
        End Set
    End Property

    <DataMember()> _
    Private _File As FileInfo
    Public Property File() As FileInfo
        Get
            Return _File
        End Get
        Set(ByVal value As FileInfo)
            _File = value
        End Set
    End Property

End Class
_
公共MustInherit类SystemTaskProcessBase
Public MustOverride ReadOnly Property Name()作为字符串
Public MustOverride ReadOnly Property Description()作为字符串
公共MustOverride属性Result()作为SystemTaskResult
_
Private _TaskID为整数=0
公共属性TaskID()为整数
得到
返回任务ID
结束
设置(ByVal值为整数)
_TaskID=value
端集
端属性
末级
_
公共类RebootSystemTaskProcess
继承SystemTaskProcessBase
Private\u Name As String=“重新启动系统”
Public将只读属性名()重写为字符串
得到
返回\u名称
结束
端属性
Private\u Description As String=“客户端内部重新启动的任务。”
Public将只读属性描述()重写为字符串
得到
返回\u说明
结束
端属性
_
Public\u结果为SystemTaskResult=SystemTaskResult.NotProcessed
Public将属性Result()重写为SystemTaskResult
得到
返回结果
结束
设置(ByVal值作为SystemTaskResult)
_结果=值
端集
端属性
末级
_
公共类DeleteFileSystemTaskProcess
继承SystemTaskProcessBase
Private\u Name As String=“删除文件”
Public将只读属性名()重写为字符串
得到
返回\u名称
结束
端属性
Private\u Description As String=“客户端删除本地文件的任务。”
Public将只读属性描述()重写为字符串
得到
返回描述
结束
端属性
_
Public u Result As SystemTaskResult=SystemTaskResult.NotProcessized
Public将属性Result()重写为SystemTaskResult
得到
返回结果
结束
设置(ByVal值作为SystemTaskResult)
_结果=值
端集
端属性
_
私有文件作为FileInfo
公共属性文件()作为FileInfo
得到
返回文件
结束
设置(ByVal值作为FileInfo)
_文件=值
端集
端属性
末级
我需要在客户端系统上使用这些类,但也需要能够通过管理界面创建这些“任务”。继承基类的每个类(任务)都可以有自己的属性,这些属性对于每个类都是唯一的,但同时共享相同的公共基类属性。例如,上面显示了一个重新启动任务和一个删除文件任务,删除文件任务需要知道要删除哪个文件,因此具有该文件的属性。但是重新启动任务不需要此属性。因此,当管理应用程序创建这些任务时,它不应该为重新启动任务的文件属性提供文本框。以后可能会创建更多具有完全不同属性的任务

例如,我如何向WinForms管理应用程序提供一种将每个类枚举到ListView中的方法,并允许用户创建这些任务并填充每个类将具有的动态属性

所需的功能是创建一个任务表单,根据每个类中的公共属性,根据需要为属性创建可用的动态控件,但同时也可以使用基类属性

欢迎提出任何意见

谢谢,
Scott

如果您需要一个高度可定制和可扩展的解决方案,那么一种方法就是采用日期驱动的方法。在我以前的一项工作中,我们必须根据客户机偏好创建一个动态UI,其中字段1适用于一个客户机,但另一个客户机不需要。将这种方法扩展到您的问题,您将需要有DB表

TasksTable with following columns
1.TaskId
2.TaskName
3.ClassName  (you will use reflection to create an instance of it)
另一个包含任务实际字段的表。现在让我们称之为TaskFields

TaskFields Table 
1. TaskFieldId
2. Property   (You can create another field to store the Name if you need to)
3. Enabled (bit)
4. SpecialFormat   <if you need to apply this and customize it based on some preference)

谢谢你的回复。我现在真的很想把它放在数据库之外。发布问题后,我开始阅读类和字段的自定义属性,然后能够读取这些标志值,以确定该字段是否应该为其创建控件。我认为它基本上做了与您建议的相同的事情,只是消除了对数据库的需要。@ScottN。有关使用反射获取所需属性的信息,请参见编辑。
Dim type As Type = GetType(yourClass)
Dim properties As PropertyInfo() = type.GetProperties()
Dim neededProperties = (From [property] In propertiesLet attributes = DirectCast([property].GetCustomAttributes(GetType(DataMemberAttribute), False), Attribute()) Where attributes.Count() > 0[property]).ToList()