質問
連絡先クラスのサブクラスであるオブジェクトのリストを返すクエリを実行する検索フォームを持っています。
リストがGridViewsで使用されている場合、サブクラス( hirkatatatatate など)にのみ存在するプロパティは、リストに基本クラスのオブジェクトが含まれているため表示されません( contact )
サブクラスの getContacts を作成する方法は contact のリストではなく employee のリストを返しますか?あるいは、 contact のリストを "em> employity のリストに"キャストする方法 ""
事前にありがとう!
.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);
}
解決
はい、Genericsはここでヘルプを見ることができます:
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>
{
...
}
.
これにより、特定のベースタイプ(I.E ContactManager
)を使用して作業するようにContact
を制約し、さらに(Contact
)を使用して、例えばEmployee
を使用してドリルダウンします。