我正在嘗試強制從類 EducationalUnit 派生的所有類來實作“內容”屬性。這個屬性需要是一個鍵值對,其中鍵是一個 int,值可以是另一個實作 EducationalUnit 的類,也可以是另一個我稱為 ContentBlock 的類。
在 EducationalUnit 類中,我嘗試定義一個抽象屬性來獲取 Int 和任何 Object 鍵值對。
public abstract Dictionary<int, Object> Content {get; set;}
并在繼承類中嘗試實作它:
public class Course : EducationalUnit
{
public override Dictionary<int, EducationalUnit> Content {get; set;}
public Course () {
this.Type = "Course";
}
}
但是,當我嘗試這樣做時,我得到“Course.Content”:型別必須是“Dictionary<int, object>”以匹配被覆寫的成員“EducationalUnit.Content”[Domain]csharp(CS1715)。
我假設因為所有類都從 Object 繼承,所以這應該有效。有人可以告訴我我做錯了什么以及實作這一點的潛在方法嗎?
uj5u.com熱心網友回復:
您不能Dictionary<int, Object>用覆寫型別Dictionary<int, EducationalUnit>。
不過,您可以定義一個泛型,并使其以這種方式作業。
abstract class BaseClass<T>
{
public abstract Dictionary<int, T> Content { get; set; }
}
class EducationalUnit { }
class Course : BaseClass<EducationalUnit>
{
public override Dictionary<int, EducationalUnit> Content { get; set; } = new();
public Course()
{ }
}
你也可以用 覆寫它public override Dictionary<int, object> Content { get; set; } = new();,但是你不能訪問你擁有的任何變數、屬性或方法EducationalUnit,除非你把它轉換回EducationalUnitfrom object。但這確實違背了使用繼承的目的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/525729.html
標籤:C#遗产
