3

リポジトリ クラスからジェネリック メソッドを作成しようとしています。アイデアは、何かを実行し、それを呼び出したクラスのインスタンスを返すメソッドです。

public class BaseRepository { }

public class FooRepository : BaseRepository { }

public class BarRepository : BaseRepository { }

public static class ExtensionRepository
{
    public static BaseRepository AddParameter(this BaseRepository self, string parameterValue)
    {
        //...
        return self;
    }
}

// Calling the test:
FooRepository fooRepository = new FooRepository();
BaseRepository fooWrongInstance = fooRepository.AddParameter("foo");

BarRepository barRepository = new BarRepository();
BaseRepository barWrongInstance = barRepository.AddParameter("bar");

さて、この方法で BaseRepository インスタンスを取得できます。しかし、このメソッドを呼び出した FooRepository および BarRepository インスタンスを取得する必要があります。何か案が?どうもありがとう!!!

4

2 に答える 2

6

ジェネリックを使用してみることができます

public static class ExtensionRepository
{
    public static T AddParameter<T>(this T self, string parameterValue) where T:BaseRepository 
    {
        //...
        return self;
    }
}
于 2013-04-11T14:51:48.713 に答える
0

selfそもそもなんで復帰したいの?私が見る限り(メソッド本体の中身がわからない)、新しいオブジェクトをに割り当てていませんself。したがって、呼び出し元が既に持っているのと同じインスタンスが返されます。

多分あなたはそれを返すことができますvoid:

public static void AddParameter(this BaseRepository self, string parameterValue)
{
    //...
}

使用法:

FooRepository fooRepository = new FooRepository();
fooRepository.AddParameter("foo");
// fooRepository is still fooRepository after the call


BarRepository barRepository = new BarRepository();
barRepository.AddParameter("bar");
// barRepository is still barRepository after the call
于 2013-04-11T15:11:29.037 に答える