我有一个搜索表单,它执行查询,返回作为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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top