3

我正在尝试从我的 Repository 类创建一个通用方法。这个想法是一种做某事并返回调用它的类的实例的方法。

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 回答