Вы не можете назначить OriginalThing
для NewThing
, потому что это просто , а не a 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
с (в отличие от OriginalThings
, но вы можете передать их как OriginalThing
с, если необходимо)