C# 泛型参数在继承时是不同的对象
在继承时将泛型参数带入任何类型对象的方法中,是否可以更改T的类型。例如,我有这个界面:C# 泛型参数在继承时是不同的对象,c#,generics,inheritance,C#,Generics,Inheritance,在继承时将泛型参数带入任何类型对象的方法中,是否可以更改T的类型。例如,我有这个界面: public interface IMethod { void Add<T>(T obj); List<T> Get<T>(); void Update<T>(T obj); void Delete<T>(T obj); } 公共接口方法 { 无效添加(T obj); List Get(); 无效更新(
public interface IMethod
{
void Add<T>(T obj);
List<T> Get<T>();
void Update<T>(T obj);
void Delete<T>(T obj);
}
公共接口方法
{
无效添加(T obj);
List Get();
无效更新(T obj);
无效删除(T obj);
}
我有四门课,分别是书、书架、书架。对于它们中的每一个,我都有另一个类,在那里我实现了这些方法,因此我有了其中的功能。这是书架目录
public class BookcaseCatalog: IMethod
{
private ObservableCollection<Bookcase> obsCase;
public string ConnectionString { get; set; }
public void Add(Bookcase obj)
{
}
public void Add<T>(T obj) where T : Bookcase
{
//Do smth
}
公共类书架目录:i方法
{
私人可观察收集案件;
公共字符串连接字符串{get;set;}
公共空白添加(书架obj)
{
}
公共作废添加(T obj),其中T:书架
{
//做smth
}
}
当我在这里完成时,将它继承到另一个类中的接口,例如,T是一本书。现在,用户可以决定在调用方法时使用什么类型的T
Add
(您的约束限制了这一点,但这不是如何使用它们的想法,它们不应该在实现时使用)
如果可以,请将界面设置为通用。这将允许您在实现类时决定T是什么。例如:
public interface IMethod<T>
{
void Add<T>(T obj);
List<T> Get<T>();
void Update<T>(T obj);
void Delete<T>(T obj);
}
我想你需要的是一个通用的界面 您应该将
i方法更改为:
public interface IMethod<T> {
void Add(T obj);
List<T> Get();
void Update(T obj);
void Delete(T obj);
}
就这样
我认为最好在这里学习一些术语IMethod
称为封闭类型,IMethod
称为开放类型
请注意,如果一个方法需要一个IMethod
的参数,您可以向它传递一个IMethod
。但如果它需要IMethod
,则不能给它IMethod
。这意味着关闭类型可以转换为其打开的对应类型,但关闭类型不能转换为其他关闭类型,除非应用反向和协变规则。公共接口I方法
?此外,在谈到接口时,当我说“继承”时,我得到了一个对话,所以我要把它传下去:正确的单词是Implements。作为记录,一个类不是从接口继承的,这个类实现了ithey andas,介意接受一个答案还是告诉我们你还错过了什么才能被接受吗?Add
的实现将读作public void Add(Bookcase Bookcase){}
public interface IMethod<T> {
void Add(T obj);
List<T> Get();
void Update(T obj);
void Delete(T obj);
}
public class BookcaseCatalog : IMethod<Bookcase> {
//...
}
public class Bookcase : IMethod<Bookcase> {
public void Add(Bookcase obj) {/*Do something*/}
public List<Bookcase> Get() {return something}
public void Update(Bookcase obj) {/*Do something*/}
public void Delete(Bookcase obj) {/*Do something*/}
}