我不明白爲什麼這不起作用:理解C#的類型轉換
類:
public abstract class BaseObj
{
public bool IsValid => GetValidationErrors().Count == 0;
}
public class BaseObjWithId: BaseObj
{
public int Id { get; set; }
}
public class BaseReference<T> : BaseObj where T : BaseObjWithId
{
public T ObjReference { get; set; }
}
public class Foo: BaseObjWithId
{
public string Name{get;set;}
}
public class FooRef : BaseReference<Foo>
{
}
代碼聲明:
BaseReference<BaseObjWithId> foo= new FooRef();
錯誤CS0029無法隱式轉換類型...
這工作:
BaseReference<Foo> foo= new FooRef();
但我不明白爲什麼,因爲foo是一個BaseObjWithId ...
謝謝您的解釋
當然,因爲Foo是帶附加功能的BaseObjectWithID,並且fooRef使用foo,所以BaseObjWithId是一個較小的版本,它不是相同的 – BugFinder
因爲它沒有任何意義,你正在嘗試做什麼。你可以投它,但它沒有任何目的。 – Viezevingertjes
因爲'FooRef'綁定到具體類'Foo'的實例,所以沒有辦法將它和它的基類綁定在一起,除非你讓FooRef過於通用,這更不是關於泛型的類型轉換 –