Tôi có lớp cơ sở trừu tượng và tôi muốn khai báo một trường hoặc thuộc tính sẽ có giá trị khác nhau trong mỗi lớp thừa kế từ lớp cha này.Ghi đè các trường hoặc thuộc tính trong lớp con
Tôi muốn xác định nó trong baseclass vì vậy tôi có thể tham chiếu nó trong một phương thức lớp cơ sở - ví dụ ghi đè ToString để nói "Đối tượng này thuộc loại thuộc tính/trường". Tôi đã có ba cách mà tôi có thể thấy để làm điều này, nhưng tôi đã tự hỏi - cách tốt nhất hoặc được chấp nhận để làm điều này là gì? Câu hỏi của người mới, xin lỗi.
Tùy chọn 1:
Sử dụng thuộc tính trừu tượng và ghi đè lên lớp được kế thừa. Lợi ích này được thực thi (bạn phải ghi đè nó) và nó được sạch sẽ. Tuy nhiên, nó cảm thấy hơi sai khi trả về một giá trị mã cứng thay vì đóng gói một trường và nó là một vài dòng mã thay vì chỉ. Tôi cũng phải tuyên bố một cơ thể cho "bộ" nhưng đó là ít quan trọng (và có lẽ là một cách để tránh điều mà tôi không biết).
abstract class Father
{
abstract public int MyInt { get; set;}
}
class Son : Father
{
public override int MyInt
{
get { return 1; }
set { }
}
}
Lựa chọn 2
tôi có thể tuyên bố một lĩnh vực công cộng (hoặc một lĩnh vực được bảo vệ) và rõ ràng ghi đè lên nó trong lớp kế thừa. Ví dụ dưới đây sẽ cho tôi một cảnh báo để sử dụng "mới" và tôi có thể có thể làm điều đó, nhưng nó cảm thấy sai và nó phá vỡ đa hình, đó là toàn bộ vấn đề. Không có vẻ như là một ý tưởng tốt ...
abstract class Mother
{
public int MyInt = 0;
}
class Daughter : Mother
{
public int MyInt = 1;
}
Lựa chọn 3
tôi có thể sử dụng một lĩnh vực bảo vệ và thiết lập giá trị trong constructor. Điều này có vẻ khá gọn gàng nhưng dựa vào tôi đảm bảo các nhà xây dựng luôn luôn đặt này và với nhiều nhà xây dựng quá tải luôn luôn có một cơ hội một số đường dẫn mã sẽ không đặt giá trị.
abstract class Aunt
{
protected int MyInt;
}
class Niece : Aunt
{
public Niece()
{
MyInt = 1;
}
}
Đó là một chút của một câu hỏi lý thuyết và tôi đoán câu trả lời đã được lựa chọn 1 vì nó là chỉ an toàn tùy chọn nhưng tôi chỉ nhận được để hiểu thấu với C# và muốn hỏi người này với nhiều kinh nghiệm.
Là một sang một bên, tôi thực sự nghĩ rằng ** Cha ** nên áp dụng công thức "Y", và mẹ, hợp lý, "X". –