向上转换-c#

问题描述

|
public class a{
  public string x1 {get;set;}
  public string x2 {get;set;}
  public string x3 {get;set;}
}

public class b:a{
}
显然,“ 1”会在运行时引发转换错误。 我认为分配已实例化并填充的2的所有属性的唯一另一种方法是将每个属性手动复制到3的新实例中。 它是否正确?     

解决方法

        这种类型的投射是错误的,因为您无法将父母投射给他们的孩子。
a
的类型不知道
b
的元信息。因此,您需要提供显式的强制转换运算符来执行此类操作,但是在这种情况下,您必须删除继承。 另一种选择是定义一些接口,例如在其他问题中。 更多信息: http://msdn.microsoft.com/en-us/library/ms173105.aspx http://msdn.microsoft.com/zh-CN/library/85w54y0a.aspx     ,        不可能。即使您认为自己拥有它,编译器也会抱怨。 这通常表示设计或逻辑错误。     ,        这件事也一直困扰着我。 我通过创建自己的Up-Casting实用程序制定了解决方案。 您可以在此处阅读我的文章,该文章实际上是非常简单的。 http://sympletech.com/c-up-casting-utility/     ,        您实际上正在寻找的实际上是DOWNCAST,而不是Upcast。为此,我们假设您有一个对象对象,例如ObjA。现在创建一个对象ObjNewA,执行以下操作:
b new_ObjNewA = ObjA as b;
上面的代码应该工作100% 可以这样认为:ClassName NewObject = OldObject as ClassName; 其中的类名是继承的类或子类。这是确保其正常工作的屏幕截图:     ,        你不能做那个演员。 您可以,而且我想应该使用界面。
public interface ia
{
    string x1 { get; set; }
    string x2 { get; set; }
    string x3 { get; set; }
}
public class a : ia
{
    public string x1 { get; set; }
    public string x2 { get; set; }
    public string x3 { get; set; }
}

public class b : a,ia
{
}
那么你就可以
ia foo = new a();
    ,        实际上,创建b的新实例并将a的字段值复制到其中的想法似乎是一种有趣的方法。使用反射来实现这一点应该很合适。 诸如此类:遍历a \的所有字段,获取它们存储在a中的值,并将它们存储在b中的同一字段中。 但是,这不是“向下转换”,因为它意味着创建了完全不同的对象,而不是重新解释现有对象的含义。     ,        就像每个人都说的那样,这是不可能的。隐式转换是一种解决方案,但是我更喜欢在b上创建一个构造函数,该构造函数采用a类型的实例。 这样,您可以:在内部保留对该引用的引用,并对其进行调用,以从b继承b的继承,或者只是将值复制到类型a中。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...