Да, так же, как если бы оно не было определено как автоматическое свойство.
Распределение необходимо в базовом классе, поскольку оно все еще должно существовать и быть полезным. Базовый класс не имеет знаний о существовании производного класса, и производный класс может использовать поле подкладочного в определении
Если у вас есть база и производный класс определяется как:
public class Base
{
public virtual string Name {get; set;}
}
public class Derived : Base
{
private string _name;
public override string Name
{
get {
return _name;
}
set
{
//access the base property we are overriding
base.Name = value + " from derived";
_name = value;
}
}
}
Вы можете использовать отражение, чтобы увидеть, что поддержка поля базового класса действительно существует, и ведет себя, как и ожидалось:
Type tbase = typeof(Base);
FieldInfo fi = tbase.GetField("<Name>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance);
Base b = new Base {Name = "Test"};
string baseValue = fi.GetValue(b).ToString();
Console.WriteLine(baseValue); //gives "Test";
Derived d = new Derived {Name = "Test" };
string derivedValue = fi.GetValue(d).ToString();
Console.WriteLine(derivedValue); //gives "Test from derived";
имя фактического поля подложки недокументированная деталь реализации, так что я бы не использовать его в любом производственный код. (Я получил его, используя IL-код LINQPad)
Интересный вопрос, и я не знаю ответа, но разве можно получить ответ через отражение или дизассемблер? – PVitt
Не просто распределение, но сама вещь не должна существовать (поскольку 'get' также игнорирует ее). –
@GrantThomas Поле базы данных все еще должно существовать в базовом классе, потому что вы можете получить к нему доступ таким образом: '((Base) childInstance) .MyInt' – MarcinJuraszek