Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Поведение System.Object, заданное по умолчанию

Поведение System.Object, заданное по умолчанию

Чтобы продемонстрировать некоторые особенности принятого по умолчанию поведения базового класса System.Object, рассмотрим класс Person (персона), определенный в пользовательском пространстве имен ObjectMethods.

// Ключевое слово 'namespace' обсуждается в конце этой славы.
namespace ObjectMethods {
 class Person {
  public Person(string fname, string lname, string s, byte a) {
   firstName = fname; lastName = lname; SSN = s; age = a;
  }
  public Person() {}
  // Персональные данные (данные состояния).
  public string firstMame;
  public string lastName;
  public string SSN;
  public byte age;
 }
}

Теперь используем тип Person в рамках метода Main().

static void Main(string[] args) {
 Console.WriteLine("***** Работа с классом Object *****n");
 Person fred = new Person("Фред", "Кларк", "111-11-1111", 20);
 Console.WriteLine("-› fred.ToString: {0}", fred.ToString());
 Console.WriteLine("-› fred.GetHashCode: {0}", fred.GetHashCode());
 Console.WriteLine("-› базовый класс для 'fred': {0}", fred.GetType().BaseType);
 // Создание дополнительных ссылок на 'fred'.
 Person p2 = fred;
 object о = p2;
 // Указывали ли все 3 экземпляра на один объект в памяти?
 if (о.Equals(fred) && p2.EqualS(o)) Console.WriteLine("fred, p2 и о ссылаются на один объект!");
 Console.ReadLine();
}

На риc. 3.17 показан вариант вывода, полученного при тестовом запуске программы.


Рис. 3.17. Реализация членов System.Object, заданная по умолчанию

Обратите внимание на то, что заданная по умолчанию реализация ToString() просто возвращает полное имя типа (например, в виде пространствоИмён.ИмяТипа).

Метод GetType() возвращает объект System.Type, который определяет свойство BaseType (как вы можете догадаться сами, оно идентифицирует полное имя базового класса данного типа).

Теперь рассмотрим программный код, использующий метод Equals(). Здесь в управляемой динамической памяти размещается новый объект Person, и ссылка на этот объект запоминается в ссылочной переменной fred. Переменная р2 тоже имеет тип Person, однако здесь не создается новый экземпляр класса Person, a присваивается fred переменной р2. Таким образом, и fred, и р2, а также переменная о (типа object, которая была добавлена для полноты картины) указывают на один и тот же объект в памяти. По этой причине тест на тождественность будет успешным.

Оглавление книги


Генерация: 1.727. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз