私はこれまでにこの問題に遭遇しました。残念ながら、C#は複数の継承をサポートしていないため、BaseForm
とBaseUserControl
はBaseFunctions
とForm
とUserControl
(それぞれ)を継承できません。
私が使用する回避策は、必要なメソッドを持つIBaseFunctions
インターフェイスを作成し、ヘルパークラスに機能を配置することです。
あなたはまだ多くのコピーパスタを持っていますが、少なくともそれは単なるラッピングであり、必要なロジックではありません。
EX:
public interface IBaseFunctions
{
IUser GetCurrentUser();
void ShowMessage(String message);
}
public class BaseFunctionsHelper : IBaseFunctions
{
public IUser GetCurrentUser()
{
// Get Current User
}
public void ShowMessage(String message)
{
// Show message
}
}
public class BaseForm : Form, IBaseFunctions
{
private readonly IBaseFunctions _helper = new BaseFunctionsHelper();
public IUser GetCurrentUser()
{
return _helper.GetCurrentUser();
}
public void ShowMessage(String message)
{
return _helper.ShowMessage(message);
}
}
public class BaseControl : UserControl, IBaseFunctions
{
private readonly IBaseFunctions _helper = new BaseFunctionsHelper();
public IUser GetCurrentUser()
{
return _helper.GetCurrentUser();
}
public void ShowMessage(String message)
{
return _helper.ShowMessage(message);
}
}
私のロジックはセキュリティマネージャとLanguageManagerであり、基本形とBaseUserControlだけ最小限のコード(acutallyつの特性と一つの方法)を含みます。あまりコードではないとしても、それはまだ複製されています。 –
@ Anne-Christine、ベースクラスのプロパティとメソッドがマネージャクラスの実装を使用する場合、重複したコードはありません。 –