私は、複数のクラスを持つコードをリファクタリングする必要があり、クラスのオブジェクトはユーザーの要求に応じて動的に作成する必要があります。今、クラスはすべてそこにあり、お互いに一致する共通のメソッドがありません。だから私はそれにインターフェイスを追加し、実際のクラスを参照するインターフェイス参照を返すファクトリクラスを作成することはできません。オブジェクトを動的に作成できるように、これをリファクタリングするジェネリックスやその他の方法がありますか?ここでのアプローチは、各クラスのオブジェクトがインスタンス化され、すべてのメソッドが呼び出されるメインクラスがあることです。私たちはシナリオにインターフェースやソリューションを持たないファクトリパターンを実装できますか?お願いします。インターフェイスを使用せずにFactoryPatternを実装するC#
シナリオを説明するサンプルコードを追加します。
public interface ITest
{
string TestMethod1(string st, int ab);
int TestMethod2(string st);
void TestMethod4(int ab);
float ITest.TestMethod3(string st);
}
public class Class1 : ITest
{
public string TestMethod1(string st, int ab)
{
return string.Empty;
}
public void TestMethod4(int ab)
{
throw new NotImplementedException();
}
public int TestMethod2(string st)
{
throw new NotImplementedException();
}
public float TestMethod3(string st)
{
throw new NotImplementedException();
}
}
public class Class2 : ITest
{
float ITest.TestMethod3(string st)
{
return float.Parse("12.4");
}
void ITest.TestMethod4(int ab)
{
throw new NotImplementedException();
}
public string TestMethod1(string st, int ab)
{
throw new NotImplementedException();
}
public int TestMethod2(string st)
{
throw new NotImplementedException();
}
}
public class Main
{
ITest test = null;
public ITest CreateFactory(TestType testType)
{
switch(testType)
{
case TestType.Class1:
test = new Class1();
break;
case TestType.Class2:
test = new Class2();
break;
}
return test;
}
}
enum TestType
{
Class1,
Class2
}
したがって、上記のように、一般的な方法がないため、インタフェースを使用できません。だから私が空のインターフェースや抽象メソッドを持っていれば、他にどんな解決方法があるのか、それがどのように役立つでしょう。共通のメソッドをインターフェースに入れて、すべてのクラスが実装していても、インターフェースへの参照を渡しているので、インターフェース参照からしか共通のメソッドにアクセスすることはできません。
私の考えは、以下のようなものを使用することですが、戻り値の型が何であるか、または定義する必要があるかは不明です。私はお返しに、ここでTを定義するにはどうすればよい
public T CreateFactory(TestType testType)
{
switch(testType)
{
case TestType.Class1:
return GetInstance<Class1>("Class1");
case TestType.Class2:
return GetInstance<Class1>("Class2");
}
return null;
}
public T GetInstance<T>(string type)
{
return (T)Activator.CreateInstance(Type.GetType(type));
}
が私の関心事であると誰もがそれを助けることができるかどうか、私は、それを呼び出すことができ、その後、私は解に近いと思います。私は問題を理解し、それに打撃を与え、完全とは言わないよ、私の問題
public static T CreateFactory<T>()
where T: IFactory, new()
{
return new T();
}
はhttp://codereview.stackexchange.com 上のポストを作成したり、そうでない場合は、ここで をあなたのコードを貼り付けこれはちょうど理論的な議論です –
どのように処理するか、またはどのメソッドを呼び出す必要があるのか(オブジェクトの作成後に)後でどのように知っていますか?その論理はあなたの問題を解決するのに役立ちます。 –
これは私の問題です。私は、指定された型のオブジェクトを作成し、生成されたオブジェクトを返すクラスを持っていますが、返すためには、それをキャストするか変換するか、すべてのクラスで実装されたインタフェースを持っていなければなりません。私はここにインターフェイスを持つことはできませんbcoz一般的な方法はないので、私はこの場合何ができますか? – Blossom