根據圖片中顯示的C#代碼,Employee 是一個抽象類別,它有三個私有欄位:id、name和age。Staff 類別繼承自 Employee 並在其構造函數中嘗試直接訪問這些私有欄位。
在C#中,私有欄位只能被其所在的類別的方法直接訪問。因此,即使是衍生類別(子類別),也無法直接訪問父類別的私有成員。這導致在 Staff 類別的構造函數中對 this.id、this.name 和 this.age 的賦值操作是非法的,將導致編譯錯誤。
要修復這個問題,可以通過以下方法:
在 Employee 類別中提供受保護的(protected)或公開的(public)屬性或方法來訪問這些私有欄位。
修改欄位的可訪問性,將 private 改為 protected,使得在繼承的類別中可以訪問它們。
以下是根據第二種方法修改後的程式碼:
csharp
Copy code
public abstract class Employee
{
protected string id;
protected string name;
protected int age;
public Employee() { }
}
public class Staff : Employee
{
public Staff(string _id, string _name, int _age)
{
this.id = _id;
this.name = _name;
this.age = _age;
}
}
在這個修訂版本中,我將 Employee 類別中的 id、name 和 age 欄位的訪問修飾符從 private 更改為 protected。這樣 Staff 類別(作為子類別)就能合法地訪問這些欄位了。