Итак, у меня есть общий базовый класс:
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) классов источников данных для использования в 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 конструктора + их вызов базового класса) в каждом классе источника данных?
или
Если это невозможно:
По крайней мере, определите, что все классы, производные от DatabaseDatasourceClassBase, должны иметь эти 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?
Каждый класс должен предоставить свой собственный конструктор(ы) и определить, как они хотят вызывать конструктор(ы) базового класса.
At least define that all classes which are derived from DatabaseDatasourceClassBase have to have these 2 Constructors?
Классы должны вызывать конструктор базового класса хотя бы один, но нет способа принудительно указать, какой именно, или требовать подключения более одного базового конструктора.
Это по крайней мере в коде.
Я думаю, вы могли бы сделать что-то сумасшедшее со статическим анализом кода.
В настоящее время нет возможности сделать это. Я предложил добавить функцию автоматического расширения конструкторов базового класса... github.com/dotnet/csharplang/discussions/…