如何在 C# 中从泛型基 class 自动提供构造函数?
How to automaticly provide constructors from generic base class in C#?
所以我有一个像这样的通用基础 class:
class DatabaseDatasourceClassBase<DomainClass>
where DomainClass : new()
{
protected DomainClass m_DbObject;
public AddableDatabaseDatasourceClassBase()
{
m_DbObject = new DomainClass();
}
public AddableDatabaseDatasourceClassBase(DomainClass initialObject, ISessionWrapper dbSession)
{
m_DbObject = initialObject;
//Do stuff like calling SetSession(dbSession);
}
//Several functions and stuff like SetSession(ISessionWrapper dbSession)
}
我还得到了很多(>20)数据源-classes 用于 wpf-datagrids。
class CurrencyDatasource : AddableDatabaseDatasourceClassBase<Currency>
{
//The constructors look always the same
public CurrencyDatasource()
:base()
{
}
public CurrencyDatasource(Currency initialExchange, ISessionWrapper dbSession)
:base(initialExchange, dbSession)
{
}
//Following Properties are always different
public string Name
{
get
{
return m_DbObject.Name;
}
set
{
m_DbObject.Name = value;
}
}
}
所以我想知道是否有一种方法可以避免在每个数据源中都必须编写相同的代码(2 个构造函数 + 它们对基础 class 的调用)class?
或
如果这不可能:
至少定义所有从 DatabaseDatasourceClassBase 派生的 classes 必须有这 2 个构造函数?
So I wonder if there is a way to avoid having to write the same code (the 2 constructors + their call to the base class) in every Datasource class?
每个 class 必须提供自己的构造函数并定义它们希望如何调用基础 class 的构造函数。
At least define that all classes which are derived from DatabaseDatasourceClassBase have to have these 2 Constructors?
类 必须调用 至少一个 基础 class 构造函数,但无法强制执行哪一个,或者需要多个基础构造函数上钩了。
至少在代码中是这样。
我猜你可以用静态代码分析做一些疯狂的事情。
所以我有一个像这样的通用基础 class:
class DatabaseDatasourceClassBase<DomainClass>
where DomainClass : new()
{
protected DomainClass m_DbObject;
public AddableDatabaseDatasourceClassBase()
{
m_DbObject = new DomainClass();
}
public AddableDatabaseDatasourceClassBase(DomainClass initialObject, ISessionWrapper dbSession)
{
m_DbObject = initialObject;
//Do stuff like calling SetSession(dbSession);
}
//Several functions and stuff like SetSession(ISessionWrapper dbSession)
}
我还得到了很多(>20)数据源-classes 用于 wpf-datagrids。
class CurrencyDatasource : AddableDatabaseDatasourceClassBase<Currency>
{
//The constructors look always the same
public CurrencyDatasource()
:base()
{
}
public CurrencyDatasource(Currency initialExchange, ISessionWrapper dbSession)
:base(initialExchange, dbSession)
{
}
//Following Properties are always different
public string Name
{
get
{
return m_DbObject.Name;
}
set
{
m_DbObject.Name = value;
}
}
}
所以我想知道是否有一种方法可以避免在每个数据源中都必须编写相同的代码(2 个构造函数 + 它们对基础 class 的调用)class?
或
如果这不可能:
至少定义所有从 DatabaseDatasourceClassBase 派生的 classes 必须有这 2 个构造函数?
So I wonder if there is a way to avoid having to write the same code (the 2 constructors + their call to the base class) in every Datasource class?
每个 class 必须提供自己的构造函数并定义它们希望如何调用基础 class 的构造函数。
At least define that all classes which are derived from DatabaseDatasourceClassBase have to have these 2 Constructors?
类 必须调用 至少一个 基础 class 构造函数,但无法强制执行哪一个,或者需要多个基础构造函数上钩了。
至少在代码中是这样。
我猜你可以用静态代码分析做一些疯狂的事情。