Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 108
- Предыдущая
- 108/642
- Следующая
c.SetDriverName("Tiny");
c.PopAWheely();
Console.WriteLine("Rider name is {0}", c.name); // Выводит пустое значение name!
Проблема в том, что реализация метода
SetDriverName()
name
name
name
this
public void SetDriverName(string name) => this.name = name;
Если неоднозначность отсутствует, тогда применять ключевое слово
this
string
name
driverName
this
class Motorcycle
{
public int driverIntensity;
public string driverName;
public void SetDriverName(string name)
{
// These two statements are functionally the same.
driverName = name;
this.driverName = name;
}
...
}
Несмотря на то что применение ключевого слова
this
this
На заметку! Общепринятое соглашение об именовании предусматривает снабжение имен закрытых (или внутренних) переменных уровня класса префиксом в виде символа подчеркивания (скажем,
_driverName
Построение цепочки вызовов конструкторов с использованием this
Еще один сценарий применения ключевого слова
this
Motorcycle
class Motorcycle
{
public int driverIntensity;
public string driverName;
public Motorcycle() { }
// Избыточная логика конструктора!
public Motorcycle(int intensity)
{
if (intensity > 10)
{
intensity = 10;
}
driverIntensity = intensity;
}
public Motorcycle(int intensity, string name)
{
if (intensity > 10)
{
intensity = 10;
}
driverIntensity = intensity;
driverName = name;
}
...
}
Здесь (возможно в попытке обеспечить безопасность мотоциклиста) внутри каждого конструктора производится проверка того, что уровень мощности не превышает значения 10. Наряду с тем, что это правильно, в двух конструкторах присутствует избыточный код. Подход далек от идеала, поскольку в случае изменения правил (например, если уровень мощности не должен превышать значение 5 вместо 10) код придется модифицировать в нескольких местах.
Один из способов улучшить создавшуюся ситуацию предусматривает определение в классе
Motorcycle
class Motorcycle
{
public int driverIntensity;
public string driverName;
// Конструкторы.
public Motorcycle() { }
public Motorcycle(int intensity)
{
SetIntensity(intensity);
}
public Motorcycle(int intensity, string name)
- Предыдущая
- 108/642
- Следующая