我的实体类是这样建的: (为了调用方便,所以采用了枚举列出所有字段,该实体类将会在业务逻辑层、数据访问层、甚至UI控制层,均被用到) Public Class modClient Public Const TableName = "表名" Private _FieldValie(1) As Object Private _FieldValieNew(1) As Boolean Default Public Property FieldValie(ByVal pField As Field) As Object Get Return _FieldValie(pField) End Get Set(ByVal value As Object) _FieldValie(pField) = value End Set End Property Public Shared Property GetFieldSQL(ByVal pField As Field) As String Get Return _Field(pField) End Get Set(ByVal value As String) _Field(pField) = value End Set End Property Public Shadows Enum Field 字段名1 字段名2 End Enum Private Shared _Field() As String = {"字段1", _ "字段2"} End Class
补充:比如UI控制层可使用如下代码方便的操作此实体类: tbCode.Text = modClient1(modClient.Field.客户编码) modClient1(modClient.Field.客户编码)=tbCode.Text 再来个详细点的列子如下:Dim modVClient1 As modVClient Dim clsClient1 As New clsClientDim arrField() As modVClient.Field = {modVClient.Field.字段名1, _ modVClient.Field.字段名2} modVClient1 = clsClient1.GetVModle(ClientID, arrField)TextBox1.Text = modVClient1(modVClient.Field.字段名1) TextBox2.Text = modVClient1(modVClient.Field.字段名2)
也许我前面的描述让很多朋友看不明白,其实我遇到的问题是这样的: 比如我有很多这类class: Public Class modXXX Public Shadows Enum Field 字段A 字段B End Enum Private Shared _Field() As String = {"A", _ "B"} Public Shared Function GetFieldName(ByVal pField As Field) As String Return _Field(pField) End Function End Class这个类中Field和_Field是每个类内容不一样的,不可重用内容,而GetFieldName这种函数(这个类中有很多这类函数)是所有类都是共用的,我希望将这些函数重用。问题是这类函数用到了前面不能重用的枚举或数组。 如果将这些共用函数放入一个基类,那就必须将枚举和数组也放到基类,然后继承类使用Shadows覆盖基类,但这样会导致外部调用该函数,传入枚举参数时,自动弹出的列表中显示的是基类的枚举,而不是继承类。 我真是郁闷了,已经试了好多方法了,都不行。期盼高手的指点。。
我想你要的是这个? public class DbColumnEntity { private string _ColumnName;//列名,例如 UserName private string _ColumnDescription;//列描述,例如 用户名 public string ColumnName { get { return _ColumnName; } set { _ColumnName = value; } }
public string ColumnDescription { get { return _ColumnDescription; } set { _ColumnDescription = value; } } public DbColumnEntity(string Name,string Desc ) { _ColumnName = Name; _ColumnDescription = Desc;
} } public class BaseClass { private List<DbColumnEntity> _Columns = new List<DbColumnEntity>(); public List<DbColumnEntity> Columns { get { return _Columns; } set { _Columns = value; } } public BaseClass() {//基类的列 _Columns.Add(new DbColumnEntity("name1", "desc1")); _Columns.Add(new DbColumnEntity("name2", "desc2")); } public DbColumnEntity GetColumn(string ColumnName) { DbColumnEntity dc1 = _Columns.Find( delegate(DbColumnEntity dc) { return dc.ColumnName == ColumnName; } );
return dc1; } } public class SubClass1 : BaseClass { public SubClass1() {//基类1的特殊列 Columns.Add(new DbColumnEntity("subclass1name1", "subclass1desc1")); Columns.Add(new DbColumnEntity("subclass1name2", "subclass1desc2")); } } public class SubClass2 : BaseClass { public SubClass2() {//子类2的特殊列 Columns.Add(new DbColumnEntity("subclass2name1", "subclass2desc1")); Columns.Add(new DbColumnEntity("subclass2name2", "subclass2desc2")); } }
固定的一些值,使用枚举,写在程序中。
(为了调用方便,所以采用了枚举列出所有字段,该实体类将会在业务逻辑层、数据访问层、甚至UI控制层,均被用到)
Public Class modClient
Public Const TableName = "表名" Private _FieldValie(1) As Object
Private _FieldValieNew(1) As Boolean Default Public Property FieldValie(ByVal pField As Field) As Object
Get
Return _FieldValie(pField)
End Get
Set(ByVal value As Object)
_FieldValie(pField) = value
End Set
End Property Public Shared Property GetFieldSQL(ByVal pField As Field) As String
Get
Return _Field(pField)
End Get
Set(ByVal value As String)
_Field(pField) = value
End Set
End Property Public Shadows Enum Field
字段名1
字段名2
End Enum Private Shared _Field() As String = {"字段1", _
"字段2"}
End Class
tbCode.Text = modClient1(modClient.Field.客户编码)
modClient1(modClient.Field.客户编码)=tbCode.Text
再来个详细点的列子如下:Dim modVClient1 As modVClient
Dim clsClient1 As New clsClientDim arrField() As modVClient.Field = {modVClient.Field.字段名1, _
modVClient.Field.字段名2}
modVClient1 = clsClient1.GetVModle(ClientID, arrField)TextBox1.Text = modVClient1(modVClient.Field.字段名1)
TextBox2.Text = modVClient1(modVClient.Field.字段名2)
所以如上结构,是出于如下理由:
1、字段设置到枚举,这样程序员就可以和数据库分离。不用再关心数据库结构。
2、UI控制层操作实体类,是因为,我觉得只有UI层才知道要读取那几个字段,或要保存那几个字段。这些如果封装到业务逻辑层,那业务逻辑层程序员必须了解UI层。
或通过泛型实现统一性操作更简单
比如我有很多这类class:
Public Class modXXX
Public Shadows Enum Field
字段A
字段B
End Enum Private Shared _Field() As String = {"A", _
"B"} Public Shared Function GetFieldName(ByVal pField As Field) As String
Return _Field(pField)
End Function
End Class这个类中Field和_Field是每个类内容不一样的,不可重用内容,而GetFieldName这种函数(这个类中有很多这类函数)是所有类都是共用的,我希望将这些函数重用。问题是这类函数用到了前面不能重用的枚举或数组。
如果将这些共用函数放入一个基类,那就必须将枚举和数组也放到基类,然后继承类使用Shadows覆盖基类,但这样会导致外部调用该函数,传入枚举参数时,自动弹出的列表中显示的是基类的枚举,而不是继承类。
我真是郁闷了,已经试了好多方法了,都不行。期盼高手的指点。。
{
private string _ColumnName;//列名,例如 UserName
private string _ColumnDescription;//列描述,例如 用户名 public string ColumnName
{
get { return _ColumnName; }
set { _ColumnName = value; }
}
public string ColumnDescription
{
get { return _ColumnDescription; }
set { _ColumnDescription = value; }
} public DbColumnEntity(string Name,string Desc )
{
_ColumnName = Name;
_ColumnDescription = Desc;
}
}
public class BaseClass
{
private List<DbColumnEntity> _Columns = new List<DbColumnEntity>(); public List<DbColumnEntity> Columns
{
get { return _Columns; }
set { _Columns = value; }
}
public BaseClass()
{//基类的列
_Columns.Add(new DbColumnEntity("name1", "desc1"));
_Columns.Add(new DbColumnEntity("name2", "desc2"));
} public DbColumnEntity GetColumn(string ColumnName)
{
DbColumnEntity dc1 = _Columns.Find(
delegate(DbColumnEntity dc)
{
return dc.ColumnName == ColumnName;
} );
return dc1;
}
} public class SubClass1 : BaseClass
{
public SubClass1()
{//基类1的特殊列
Columns.Add(new DbColumnEntity("subclass1name1", "subclass1desc1"));
Columns.Add(new DbColumnEntity("subclass1name2", "subclass1desc2"));
}
}
public class SubClass2 : BaseClass
{
public SubClass2()
{//子类2的特殊列
Columns.Add(new DbColumnEntity("subclass2name1", "subclass2desc1"));
Columns.Add(new DbColumnEntity("subclass2name2", "subclass2desc2"));
}
}