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