在派生函数中返回派生类型
本文关键字:派生 类型 返回 函数 | 更新日期: 2023-09-27 18:21:11
我有一个搜索表单,它执行返回对象列表的查询,这些对象是Contact类的子类。
在网格视图中使用列表时,仅存在于子类(如HireDate)中的属性不会显示,因为列表包含基类的对象(Contact。
有没有办法让子类中的GetContacts返回Employee的列表,而不是Contact的列表?或者将联系人列表"转换"为员工的列表?
提前感谢!
public abstract class Contact
{
public string Name { get; set; }
}
public class Employee : Contact
{
public DateTime HireDate { get; set; }
}
public abstract class ContactManager
{
public abstract List<Contact> GetContacts(string searchValue);
}
public class EmployeeManager : ContactManager
{
public abstract List<Contact> GetContacts(string searchValue);
}
是的,泛型可以在这里提供帮助:
public abstract class ContactManager<T> where T : Contact
{
public abstract List<T> GetContacts(string searchValue);
}
public class EmployeeManager : ContactManager<Employee>
{
public abstract List<Employee> GetContacts(string searchValue);
}
或者,您可以使用LINQ OfType方法从您的收藏中获取所需类型的所有联系人:
IEnumerable<Employee> employees = contactManager.GetContacts("someSearchValue").OfType<Employee>();
您可以使用泛型,比如:
public abstract class ContactManager<TContactType>
where TContactType : Contact
{
public abstract List<TContactType> GetContacts(string searchValue);
}
public abstract class EmployeeManager : ContactManager<Employee>
{
...
}
这允许您将ContactManager
约束为使用特定的特定基类型(即Contact
),并进一步使用(Contact
的)特定类型来深化强类型,例如使用Employee
。