Làm thế nào tôi có thể kiểm tra/đánh giá chính xác loại T mà không có đối tượng cho T. Tôi biết câu hỏi của tôi có thể khó hiểu nhưng xem xét ...Generics: Làm thế nào để kiểm tra chính xác loại T, không có đối tượng cho T
public abstract class Business
{
public abstract string GetBusinessName();
}
public class Casino : Business
{
public override string GetBusinessName()
{
return "Casino Corp";
}
}
public class DrugStore : Business
{
public override string GetBusinessName()
{
return "DrugStore business";
}
}
public class BusinessManager<T> where T : Business
{
private Casino _casino;
private DrugStore _drugStore;
public string ShowBusinessName()
{
string businessName;
if (T == Casino) // Error: How can I check the type?
{
_casino = new Casino();
businessName = _casino.GetBusinessName();
}
else if (T == DrugStore) // Error: How can I check the type?
{
_drugStore = new DrugStore();
businessName = _drugStore.GetBusinessName();
}
return businessName;
}
}
Tôi chỉ muốn có một cái gì đó như thế này trên máy khách.
protected void Page_Load(object sender, EventArgs e)
{
var businessManager = new BusinessManager<Casino>();
Response.Write(businessManager.ShowBusinessName());
businessManager = new BusinessManager<DrugStore>();
Response.Write(businessManager.ShowBusinessName());
}
Lưu ý rằng tôi thực sự không tạo đối tượng thực tế cho Sòng bạc và Nhà thuốc khi tôi gọi BusinessManager, tôi chỉ chuyển nó làm hạn chế kiểu chung của lớp. Tôi chỉ cần biết chính xác loại nào tôi đang chuyển BusinessManager để biết chính xác loại nào để khởi tạo. Cảm ơn ...
PS: Tôi không muốn tạo BusinessManager cụ thể riêng cho Casino và Drugstore ..
Bạn cũng có thể bình luận về thiết kế .. thanks ..
BỔ SUNG: và những gì nếu Casino lớp và nhà thuốc là một lớp trừu tượng =)
hmm .. bị bệnh thử phương pháp này .. – CSharpNoob
Cảm ơn mọi người vì tất cả các câu trả lời của bạn! nhưng tôi đã cho CHECK đến người đầu tiên đề xuất phương pháp tiếp cận phù hợp hơn .. cảm ơn! – CSharpNoob
hey nếu tôi làm cho lớp Casino và DrugStore cũng là một lớp trừu tượng, có cách giải quyết nào về vấn đề này không? – CSharpNoob