将基类型转换/转换为派生类型

Nic*_*ick 7 .net c#

我通过派生它来扩展现有的.NET框架类.如何将基类型的对象转换为派生类型?

public class Results { //Framework methods }

public class MyResults : Results { //Nothing here }

//I call the framework method

public static MyResults GetResults()
{
    Results results = new Results();
    //Results results = new MyResults(); //tried this as well.

    results = CallFrameworkMethod();

    return (MyResults)results; //Throws runtime exception
}
Run Code Online (Sandbox Code Playgroud)

我知道这发生在我尝试将基类型转换为派生类型时,如果派生类型具有其他属性,则不会分配内存.当我添加其他属性时,我不在乎它们是否被初始化为null.

如果不进行手动复制,我该怎么做?

ito*_*son 11

你不能.如果results没有引用a MyResults(例如,如果CallFrameworkMethod返回一个基本Results实例),则转换将不会这样:你需要MyResults根据现有的非创建一个新的MyResults.转换是关于更改引用的编译时类型,而不是更改引用对象的具体类型.

您可以使用诸如Reflection或AutoMapper之类的工具来帮助初始化新MyResults对象 - 但MyResults必须有一个新对象,因为您不能告诉基础Results对象成为MyResults对象.