在派生函数中返回派生类型
-
13-11-2019 - |
题
我有一个搜索表单,它执行查询,返回作为a的子类的对象列表 联系我们 类。
当列表在gridviews中使用时,仅存在于子类中的属性(例如 雇用雇员)不显示,因为列表包含基类的对象(联系我们).
有没有办法让 获取协议 在子类中返回 雇员 而不是一个列表 联系我们 ?或者一种"投"列表的方法 联系我们 进入 雇员 ?
提前感谢!
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
.
不隶属于 StackOverflow