Когда переопределить GetHashCode ()?

Вы можете использовать шаблон SINGLETON, который позволит инициализировать класс только один раз и создать только один объект, который будет использоваться всеми.


Counter.js

// Store the unique object of the class here
let instance = null;

export default class Counter {
  constructor (params) {
    // if an object has already been created return it
    if (instance) return instance;

    // initialize the new object
    this.params = params;

    this.counter = 0;

    // store the new object
    instance = this;

    return instance;
  }

  // return the unique object or create it
  static getInstance() {
    return instance || new Counter();
  }
}

a.js

const Counter = require('./class.js');

const counterObj = new Counter(params);

[119 ] b.js

const Counter = require('./class.js');

setTimeout(() => {
  console.log(Counter.getInstance().getParams()) //Returns {}
}, 3000);
18
задан Roger Stewart 2 September 2011 в 14:59
поделиться

4 ответа

Когда вы переопределяете , в основном равны . Когда вы хотите представить идею равенства, отличную от простого ссылочного равенства.

Строка является хорошим примером этого - две строки равны (при простом вызове Equals), если они представляют одну и ту же последовательность символов. Хеш-код отражает это так, что если две строки равны, они будут иметь одинаковый хеш-код. (Обратное не обязательно верно - две неравные строки могут иметь одинаковый хэш-код, но это маловероятно.)

(Строки хитры в других отношениях, учтите - есть много разных идей равенства, основанного на культуре и регистре, но String.Equals просто смотрит на кодовые точки UTF-16, которые составляют строку, и сравнивает их самым простым способом.)

14
ответ дан 30 November 2019 в 08:48
поделиться

Если ваш тип должен следовать семантике значений (сравнение содержимого) вместо ссылочной семантики (сравнение идентичности объекта), вы должны написать собственное переопределение экземпляра object.Equals ().

4
ответ дан 30 November 2019 в 08:48
поделиться

Если вы переопределяете равно , вы также должны переопределить GetHashCode .

aspx

1
ответ дан 30 November 2019 в 08:48
поделиться

В .NET нет предварительно консервированного пустого словаря. Чтобы создать пустой словарь, просто перейдите в New Dictionary ().

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

--121 --- 3867223--

Если вы переопределяете Равно , вы также должны переопределить GetHashCode .

3
ответ дан 30 November 2019 в 08:48
поделиться