我有很多东西绕过去。

我需要向其中添加数据,并且无法修改基类

所以我有

static OriginalThing GetNewThing()
{
  return new OriginalThing();
}


现在我想添加我的数据

class EnhancedThing : OriginalThing
{
  string name;
  static EnhancedThing GetNewThing(string name)
  {
     EnhancedThing ething = new OriginalThing();   <---doesnt work even if i cast it
     ething.Name = name;
  }
}


我该怎么做呢?

最佳答案

您不能将OriginalThing分配给NewThing,因为它根本不是NewThing。另一种方法工作正常,因为NewThing具备OriginalThing的所有功能,但反之则不成立。

只需创建EnhancedThing的实例,分配名称,然后将其返回即可。您可以将EnhancedThing视为OriginalThing,因为它是OriginalThing

class EnhancedThing : OriginalThing
{
  public string Name { get; private set; }
  static EnhancedThing GetNewThing(string name)
  {
     EnhanedThing thing = new EnhancedThing();
     thing.Name = name;
     return thing;
  }
}

// ...

OriginalThing foo = EnhancedThing.GetNewThing( "someName" );


还应意识到,由于name当前是私有成员变量(在您的示例中),因此您不会花很多钱,除非您将它们视为NewThing,否则您将无法访问NewThing对象的任何其他功能。 s(与OriginalThings相对,但是如果需要,您可以将它们作为OriginalThing传递

09-30 15:39