【发布时间】:2016-03-05 13:09:45
【问题描述】:
我有以下课程:
public interface IService
{
void ApplyChanges<T>(T parameters) where T : ParamBase;
}
public class ServiceBase : IService
{
public virtual void ApplyChanges<T>(T parameters) where T : ParamBase
{ }
}
public abstract class Service : ServiceBase
{
public override void ApplyChanges<T>(T parameters) where T : ParamBase
{
Console.WriteLine(parameters.Param2);
//Apply changes logic here...
}
}
public abstract class ParamBase
{
public string Param1 { get; set; }
}
public class ParamA : ParamBase
{
public string Param2 { get; set; }
}
这里是我的测试主类:
void Main()
{
var service = new Service();
var paramA = new ParamA();
paramA.Param2 = "Test2";
service.ApplyChanges<ParamA>(paramA);
}
该实现有什么问题?如何从我的 Service 类中被覆盖的 ApplyChanges 方法访问 parameters.Param2?
一般的想法是我有一个 ServiceBase,我希望它的派生类能够将不同的参数类型传递给 ApplyChanges 方法。
【问题讨论】:
-
为什么你有一个什么都不做的 ApplyChanges 实现?这只是在示例中吗?
-
@Domysee 是的,这是我真实应用程序的简化版本。我只是想弄清楚通用继承和类型转换..
-
你不能,除非你声明它是抽象的。
-
Param2不是ParamBase的一部分,所以通用的T:where ParamBase对Param2一无所知。 -
您没有正确使用泛型。我怀疑你犯了设计错误。你真正想做什么?
标签: c# generics inheritance