扩展方法-如何在继承中返回正确的类型
本文关键字:返回 类型 继承 方法 扩展 | 更新日期: 2023-09-27 18:08:34
我试图从我的存储库类创建一个通用方法。其思想是一个方法,做一些事情并返回调用它的类的实例。
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实例。任何想法?非常感谢!!
您可以尝试使用泛型
public static class ExtensionRepository
{
public static T AddParameter<T>(this T self, string parameterValue) where T:BaseRepository
{
//...
return self;
}
}
为什么首先要返回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