Tôi có mã kế thừa bằng cách sử dụng BaseClass và mã được mong đợi là customerid là loại int. Sau đó, tôi có một yêu cầu để tạo ra một lớp mới, DerivedClass, hoạt động rất giống BaseClass nhưng bây giờ customerid cần phải là một chuỗi. Không thể sửa đổi mã cũ để kiểm tra không cần thiết.Có cách nào để sử dụng thuộc tính có cùng tên nhưng có loại khác trong lớp dẫn xuất không?
Làm cách nào để có hiệu ứng tôi muốn sử dụng thừa kế (hoặc bất kỳ cách nào khác)?
Mã kiểm tra Linqpad dưới đây minh họa những gì tôi cần làm. Rõ ràng nó sẽ không biên dịch bởi vì customerid trong DerivedClass cần phải là int. Tôi cần một chuỗi tài sản được gọi là customerid là tốt. Nó cần phải là tên đó bởi vì các mã khác sẽ sử dụng lớp này thay vì BaseClass và hy vọng cùng một thuộc tính được đặt tên là kiểu chuỗi.
public class BaseClass
{
public virtual int customerid {get; set;}
public void printname()
{
customerid = 1;
customerid.Dump();
}
}
public class DerivedClass : BaseClass
{
public override string customerid {get; set;}
public void PrintCustomerID()
{
customerid = "jshwedeX";
customerid.Dump();
}
}
void Main()
{
DerivedClass dc = new DerivedClass();
dc.printname();
}
Bạn có thể sử dụng [triển khai giao diện rõ ràng] (http://msdn.microsoft.com/en-us/library/vstudio/ms173157.aspx) không? – millimoose
Đối với lập trình VB, sử dụng từ khóa 'Bóng tối' khi tạo định nghĩa mới cho thuộc tính, trường, v.v. Điều này có thể ảnh hưởng đến lập trình động của bạn khi truyền sang loại cha nếu giá trị trả về không khớp. – ps2goat