Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从基类强制转换到继承类时是否存在InvalidCastException?_C#_.net_Inheritance_Casting - Fatal编程技术网

C# 从基类强制转换到继承类时是否存在InvalidCastException?

C# 从基类强制转换到继承类时是否存在InvalidCastException?,c#,.net,inheritance,casting,C#,.net,Inheritance,Casting,它在运行时最后一行抛出InvalidCastException有什么原因吗 (呸,当我写这篇文章的时候,答案突然出现在我的脑海里,像白天一样清晰。把它张贴给后代,只是为了确保我的答案是正确的。)所有XMLStoreCategory对象都是StoreCategorys,但不是所有StoreCategorys都是XMLStoreCategorys。在本例中,您正在创建一个StoreCategory并试图将其转换为其他对象。所有xmlstoregory对象都是StoreCategorys,但并非所有S

它在运行时最后一行抛出InvalidCastException有什么原因吗


(呸,当我写这篇文章的时候,答案突然出现在我的脑海里,像白天一样清晰。把它张贴给后代,只是为了确保我的答案是正确的。)

所有
XMLStoreCategory
对象都是
StoreCategory
s,但不是所有
StoreCategory
s都是
XMLStoreCategory
s。在本例中,您正在创建一个
StoreCategory
并试图将其转换为其他对象。

所有
xmlstoregory
对象都是
StoreCategory
s,但并非所有
StoreCategory
s都是
xmlstoregegory
s。在本例中,您正在创建一个
StoreCategory
,并试图将其转换为其他内容。

您的问题是:

public abstract class ContentManagedEntity
{
    public Guid Guid { get; set; }

    public bool Active;

    public int DisplayOrder;
}

public class StoreCategory : ContentManagedEntity
{
    public string Name { get; set; }
}

public class XMLStoreCategory : StoreCategory, IXMLDataEntity
{
    public bool Dirty = false;
}

void main() {
    var storecategory = new StoreCategory { Name = "Discount Stores" };
    var xmlstorecategory = (XMLStoreCategory) storecategory; // Throws InvalidCastException
}
猫是短毛猫吗?不一定。在这种特殊情况下,
new Cat()
是一个
Cat
而不是
短发剪辑
,因此当然会出现运行时异常

请记住,继承模型是一种关系。
Base
不一定是
派生的
,所以一般来说,“向下投射”是危险的。

你问的是:

public abstract class ContentManagedEntity
{
    public Guid Guid { get; set; }

    public bool Active;

    public int DisplayOrder;
}

public class StoreCategory : ContentManagedEntity
{
    public string Name { get; set; }
}

public class XMLStoreCategory : StoreCategory, IXMLDataEntity
{
    public bool Dirty = false;
}

void main() {
    var storecategory = new StoreCategory { Name = "Discount Stores" };
    var xmlstorecategory = (XMLStoreCategory) storecategory; // Throws InvalidCastException
}
猫是短毛猫吗?不一定。在这种特殊情况下,
new Cat()
是一个
Cat
而不是
短发剪辑
,因此当然会出现运行时异常


请记住,继承模型是一种关系。
Base
不一定是
派生的
,因此一般来说,“向下投射”是危险的。

您将对象实例化为
StoreCategory
。它与
XMLStoreCategory
不同,因此不能按这种方式转换

演员阵容将发挥作用的情况如下:

class Animal { }
class Cat : Animal { }
class ShortHairedCat : Cat { }

ShortHairedCat shortHairedCat = (ShortHairedCat)new Cat();

这会起作用,但在你的特殊情况下有些无用。只要实例化
XMLStoreCategory
,就可以了。

您将对象实例化为
StoreCategory
。它与
XMLStoreCategory
不同,因此不能按这种方式转换

演员阵容将发挥作用的情况如下:

class Animal { }
class Cat : Animal { }
class ShortHairedCat : Cat { }

ShortHairedCat shortHairedCat = (ShortHairedCat)new Cat();

这会起作用,但在你的特殊情况下有些无用。只要实例化
XMLStoreCategory
,您就可以开始了。

是的,在我发布问题时就解决了。我现在感觉很傻。哦,好吧,至少如果其他人患上了“THE st00pid”的暂时性病例,他们可以参考以下内容:是的,我在发帖的时候就想出来了。现在感觉很傻。哦,好吧,至少如果其他人患上了“THE st00pid”的暂时性病例,他们可以参考以下内容:是的,我在打字的时候就知道了。非常感谢是的,我在打字的时候就知道了。非常感谢