Как вызвать метод базового класса второго уровня, например base.base.GetHashCode ()

Вы правы, память автоматически освобождается, когда процесс завершается. Некоторые люди стараются не проводить тщательную очистку, когда процесс завершается, так как все они будут оставлены в операционной системе. Однако, пока ваша программа работает, вы должны освободить неиспользуемую память. Если вы этого не сделаете, вы можете закончиться или вызвать чрезмерный пейджинг, если ваш рабочий набор становится слишком большим.

29
задан Massimiliano Kraus 21 October 2016 в 16:47
поделиться

2 ответа

(редактировать - неправильно прочитанный вопрос)

Если вы хотите получить исходный объект , GetHashCode () версия; вы не можете - по крайней мере, если только A не сделает его доступным через что-то вроде:

protected int GetBaseHashCode() { return base.GetHashCode();}

(и не имеет B call GetBaseHashCode () ).

Причина переполнения в том, что GetHashCode (очевидно) виртуальный - не имеет значения, приведете ли вы его к объекту ; он по-прежнему начинается с самой производной реализации в реальном объекте, то есть B.GetHashCode () (отсюда и взрывной рост).

20
ответ дан 28 November 2019 в 01:49
поделиться

Вы можете использовать RuntimeHelpers.GetHashCode (object) , чтобы получить исходный хэш-код объекта:

  class A
  {
    public override int GetHashCode()
    {
      Console.WriteLine("base hashcode is: " + base.GetHashCode());

      return 1;
    }
  }

  class Program
  {
    public static void Main(string[] args)
    {
      A a = new A();

      Console.WriteLine("A's hashcode: " + a.GetHashCode());

      Console.WriteLine("A's original hashcode: " + RuntimeHelpers.GetHashCode(a));
    }
  }

Это дает следующий результат:

базовый хэш-код : 54267293
Хэш-код A: 1
Исходный хэш-код A: 54267293

Если вы посмотрите на RuntimeHelpers.GetHashCode (object) в Reflector, вы увидите, что он вызывает внутренний статический метод object.InternalGetHashCode (object) . Если вы хотите узнать больше, просмотрите этот вопрос относительно реализации GetHashCode по умолчанию.

14
ответ дан 28 November 2019 в 01:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: