我有很多东西绕过去。
我需要向其中添加数据,并且无法修改基类
所以我有
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
传递