biz*_*dee 7 c# generics inheritance
我试图做类似的事情:
public interface IView<T> : T where T : class
{
T SomeParam {get;}
}
Run Code Online (Sandbox Code Playgroud)
这样我以后就可以了
public class SomeView : IView<ISomeView>
{
}
Run Code Online (Sandbox Code Playgroud)
是否有可能以这种方式使用泛型指定继承,或者我必须走很长的路并在定义类时显式指定两个接口并执行:
public interface IView<T>
{
T SomeParam {get;}
}
public class SomeView : IView<ISomeView>, ISomeView
{
}
Run Code Online (Sandbox Code Playgroud)
简短回答:这是不可能的。看这个帖子
接口不能从class. 然而,没有什么可以阻止你这样做:
public interface ISomeView
{
}
public interface IView<out T> where T:class
{
T SomeParam { get; }
}
public class SomeView:IView<ISomeView>
{
public ISomeView SomeParam { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您不想T SomeParam { get; }每次需要实施时都实施,这可行吗?
public interface ISomeView
{
}
public abstract class BaseView<T> where T : class
{
public T SomeParam { get; set; }
}
public class SomeView : BaseView<ISomeView>{
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,这都有效:
public class main
{
public class OneOfThoseView : ISomeView
{
}
public main()
{
OneOfThoseView oneOfThose = new OneOfThoseView();
SomeView x = new SomeView();
x.SomeParam = oneOfThose;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:不完全是你想要做的,但这会迫使你的 SomeView 类返回一个BaseView<SomeView>类
public interface ISomeView
{
}
public abstract class BaseView<T> where T : BaseView<T>
{
public T SomeParam { get; set; }
}
public class SomeView : BaseView<SomeView>
{
}
Run Code Online (Sandbox Code Playgroud)
现在只有这个可行。
public main()
{
SomeView y= new SomeView ();
SomeView x = new SomeView();
x.SomeParam = y;
}
Run Code Online (Sandbox Code Playgroud)