C# 泛型接口规范化
我试图为我的通用接口提供一个基础 声明:C# 泛型接口规范化,c#,generics,interface,C#,Generics,Interface,我试图为我的通用接口提供一个基础 声明: public interface IMyInterface { ObservableCollection<object> Items {get;} } public interface IMyInterface<TValue> { new ObservableCollection<TValue> Items {get;} //Try to override base Items } void fo
public interface IMyInterface
{
ObservableCollection<object> Items {get;}
}
public interface IMyInterface<TValue>
{
new ObservableCollection<TValue> Items {get;} //Try to override base Items
}
void foo(object sender, NotifyCollectionChangedEventArgs e)
{
foreach(IMyInterface obj in e.NewItems) // e.NewItems are derived from MyBase
{
var item = obj.Items; // Problem: item = null
//Do something
}
}
但是如果我试着这样使用它,我得到了空值
我犯了什么错?还有其他更好的方法吗?这里的问题在于您的实现。强制转换将导致
null
。您只能使用协变接口,因此第一个项应为IEnumerable
:
公共接口IMyInterface
{
IEnumerable项{get;}
}
公共接口IMyInterface:IMyInterface
{
新的ObservableCollection项{get;}//尝试重写基项
}
公共抽象类MyBase:imy接口,其中T:class
{
私人可观测收集项目;
公共可观测收集项目
{
得到
{
退货(物品);;
}
}
IEnumerable IMyInterface.Items
{
得到
{
退货(物品);;
}
}
}
您在哪里实现了该接口?从您发布的代码中看不出。。。发布一些更相关的代码更新实现
void foo(object sender, NotifyCollectionChangedEventArgs e)
{
foreach(IMyInterface obj in e.NewItems) // e.NewItems are derived from MyBase
{
var item = obj.Items; // Problem: item = null
//Do something
}
}
public interface IMyInterface
{
IEnumerable<object> Items { get; }
}
public interface IMyInterface<TValue> : IMyInterface
{
new ObservableCollection<TValue> Items { get; } //Try to override base Items
}
public abstract class MyBase<T> : IMyInterface<T> where T : class
{
private ObservableCollection<T> _Items;
public ObservableCollection<T> Items
{
get
{
return _Items;
}
}
IEnumerable<object> IMyInterface.Items
{
get
{
return _Items;
}
}
}