Добавьте в проект новый файл класса С#, содержащий следующее пустое определение типа Person
// Не забывайте, что класс Person расширяет Object.
class Person {}
Теперь обновите операторы верхнего уровня для взаимодействия с унаследованными членами System.Object
Console.WriteLine("***** Fun with System.Object *****\n");
Person p1 = new Person;
// Использовать унаследованные члены System.Object.
Console.WriteLine("ToString: {0}", p1.ToString);
Console.WriteLine("Hash code: {0}", p1.GetHashCode);
Console.WriteLine("Type: {0}", p1.GetType);
// Создать другие ссылки на pi.
Person p2 = p1;
object o = p2;
// Указывают ли ссылки на один и тот же объект в памяти?
if (o.Equals(p1) && p2.Equals(o))
{
Console.WriteLine("Same instance!");
}
Console.ReadLine;
}
Вот вывод, получаемый в результате выполнения этого кода:
***** Fun with System.Object *****
ToString: ObjectOverrides.Person
Hash code: 58225482
Type: ObjectOverrides.Person
Same instance!
Обратите внимание на то, что стандартная реализация ToString
ObjectOverrides.Person). Как будет показано в главе 15, где исследуется построение специальных пространств имен, каждый проект C# определяет "корневое пространство имен", название которого совпадает с именем проекта. Здесь мы создали проект по имени ObjectOverrides, поэтому тип Person и класс Program помещены внутрь пространства имен ObjectOverrides.Стандартное поведение метода Equals
Person по имени pi. В этот момент новый объект Person помещается в управляемую кучу. Переменная р2 также относится к типу Person. Тем не менее, вместо создания р2 присваивается ссылка pi. Таким образом, переменные pi и р2 указывают на один и тот же объект в памяти, как и переменная о (типа object). Учитывая, что pi, р2 и о указывают на одно и то же местоположение в памяти, проверка эквивалентности дает положительный результат.Хотя готовое поведение System.Object
Person, добавив свойства, которые представляют имя, фамилию и возраст лица; все они могут быть установлены с помощью специального конструктора:// Не забывайте, что класс Person расширяет Object.
class Person
{
public string FirstName { get; set; } = "";
public string LastName { get; set; } = "";
public int Age { get; set; }
public Person(string fName, string lName, int personAge)
{
FirstName = fName;
LastName = lName;
Age = personAge;
}
public Person{}
}
Переопределение метода System.Object.ToString
Многие создаваемые классы (и структуры) могут извлечь преимущества от переопределения метода ToString
ToString для класса Person:public override string ToString
=> $"[First Name: {FirstName}; Last Name: {LastName};
Age:
{Age}]";Приведенная реализация метода ToString
Person содержит всего три порции данных состояния. Тем не менее, всегда помните о том, что правильное переопределение ToString должно также учитывать любые данные, определенные Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT