首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制转换类

强制转换类
EN

Stack Overflow用户
提问于 2010-03-01 16:17:01
回答 4查看 357关注 0票数 0

我有两节课:

公共类ClassA

公共类ClassB (来自另一个命名空间):ClassA

我在ClassA使用方法

代码语言:javascript
复制
public static ClassA Deserialize(string path)
{
ClassA classA;

//classA=code...

return classA;
}

我在classB调用了这个方法

代码语言:javascript
复制
public void DoSomething()
{
ClassB classB=(ClassB)ClassA.Deserialize("c:\directory\file.xml);
}

方法反序列化可以工作,但我得到错误,不能将ClassA转换为ClassB。

如何处理这个问题?

代码语言:javascript
复制
 public static ClassA DeserializeFromXml(string path)
        {

 XmlSerializer s = new XmlSerializer(typeof(ClassA));
            ClaasA h;

            TextReader r = new StreamReader(path);


                h = (ClassA)s.Deserialize(r);

                r.Close();

                return h;
}

也许是反序列化(字符串路径,类型objectType ) ??

如果有必要,我可以更改方法反序列化。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-01 16:21:08

Ais isna B is an A

(ClassB) something_that_is_A不能做,除非它是B或它的导数。

票数 6
EN

Stack Overflow用户

发布于 2010-03-01 16:20:00

如果不显示您的Deserialize代码,就很难说出发生了什么。这很可能是问题的核心--如果您想要将结果转换为ClassB,则需要让Deserialize实际创建ClassB的实例(或派生类)。如果您的Deserialize方法创建了一个ClassA实例,然后设置了一系列属性,那么您需要更改它,或者在以后找到另一种创建ClassB实例的方法。

如果值是对ClassB的实际实例的引用,则只能将表达式强制转换为ClassB。如果对象只是ClassA的一个实例,那么你将不能强制转换--在ClassB中任何额外的字段等会发生什么呢?除非是用户定义的转换,否则对引用类型的强制转换只执行引用转换-它不会创建新的对象。(有关更多详细信息,请参见Eric Lippert's blog post on representation and identity。)

票数 2
EN

Stack Overflow用户

发布于 2010-03-01 16:20:51

您的方法返回一个空函数,因此您尝试将空函数的返回类型转换为ClassB。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2354532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档