将继承的类向下转换为基类

本文关键字:转换 基类 继承 | 更新日期: 2023-09-27 18:18:07

假设我有一个基类

class baseClass
{  }

以及从该baseClass继承的另一个类

class foo : baseClass
{  }

我试图直接将其转换回(baseClass)foo但编译器说它无法完成。

有没有办法从foo只得到baseClass

将继承的类向下转换为基类

foo是一个不需要任何强制转换的baseClass。并且您的代码应该可以正常工作:

var foo = new foo();
baseClass x = (baseClass) foo;

如果你从类 B 派生一个类 A,你总是可以引用 A,就好像它是 B 一样。当然,在雷维斯案中并非如此。通常,您始终可以向下引用继承类的链。

如果编译器抱怨这样的事情,这可能只是意味着你在几个命名空间中定义了几个baseClass,而你实际上没有引用正确的baseClass。

检查您的命名空间,它应该可以解决您的错误。

这里有一个具有不同命名空间的工作示例

namespace BaseNameSpace
{
    public class BaseClass
    {
        public string Name { get; set; }
    }
}
namespace TestNameSpace.Class
{
    public class TestClass : BaseClass
    {
        public string Address { get; set; }
    }
}

用:

TestClass test1  = new TestClass();
BaseClass b = test1;

确保有正确的使用:

using BaseNameSpace;
using TestNameSpace.Class;