[英]Cast object to subclass in c#
我無法找到 C# 的相關帖子。 有沒有辦法做到這一點..
class parent {
public parent() { }
}
class child : parent {
public child() { }
}
class Program {
static void Main(string[] args) {
parent p = new parent();
child c = (child)p;
}
}
我想這樣做的原因是向通過調用函數(UIGraphics.GetCurrentContext())
創建的對象添加一些方法。
你不能那樣做。
考慮示例:
class Fruit {
// bla
}
class Banana : Fruit {
// bla
}
以下是不可能的
Fruit f = new Fruit();
Banana b = (Banana)f;
因為不是所有的水果都是香蕉
o您不能這樣做。 您聲明孩子從父母那里繼承。 沒有什么說父母必須是孩子。
如果您使用了Parent p = new Child()
那么您的類型轉換就可以了。
如果您想向現有對象添加方法,那么我認為您應該研究Extension methods
,因為它們是為擴展無法修改的類而創建的。
您的基類引用所引用的實例不是您的子類的實例。
Parent c = new child();
Parent p = new parent();
Child good = (Child )c; // OK
Child fail = (Child )p; // Throws InvalidCastException
為了使轉換成功,您要向下轉換的實例必須是您要向下轉換的類的實例。
為了使其正常工作,您必須執行以下操作:
class Program {
static void Main(string[] args) {
parent p = new child();
child c = (child)p;
}
}
您正在討論多態性的概念。 您的要求是不可能的。 原因不言而喻:
允許child
類擴展parent
類的功能,但是它希望...添加大量新方法和屬性等... child
是parent
的超集 。 因此,將parent
強制轉換為child
將留下未覆蓋的超集的一部分-子級的新成員,方法和屬性將沒有定義的功能。
如果對象首先由子構造函數啟動,則只能從父類轉換為子類。 通過多態性,這在所有 OOP 語言中都是相同的。 在這里你可以看到一個例子:
class parent {
public parent() { }
}
class child : parent {
public child() { }
}
class Program {
static void Main(string[] args) {
parent p = new child();
child c = (child)p;
}
}
要檢查實例是否由特定類啟動,您可以使用操作符: is
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.