Loading...
KatyaMarincheva avatar KatyaMarincheva 572 Точки

[Exercise] OOP - Common Type System

Здравейте колеги,

направих уж по лекцията по-голямата част от упражнението към лекция Common Type System.

Но Equals изобщо не ми работи, оттам и ==, != операторите гърмят, всички със StackOverflowException - a уж е точно по лекцията и не разбирам къде съм го омотала :)

Това ми е class Country, a това основаната програма CountryMain.

Всичко незакоментирано в Main метода си работи: Clone(), CompareTo(), Sort(),

GetHashCode() работи, но не съм сигурна дали така трябва да е направено.

Закоментираните редове в Main метода гърмят заради Equals.....

Благодаря предварително :)

Тагове:
4
C# OOP Basics
Innos avatar Innos 419 Точки
Best Answer

Да и аз го забелязах това в упражнението, причината е в проверката дали елементите са null в оператор ==,!= и Equals метода. В този ред примерно:

if (a == null || b == null)

променливата а е от тип Country съответно като провериш a == null ти извивкаш реално == оператора на Country класа (иначе казано извикваш себе си от собствения си метод което води до безкрайна рекурсия и съответно стак овърфлоу). Питах наско накрая на лекцията и той ми предложи да се използва статичният метод Equals на Object класа за да се проверява дали подадените елементи са null по този начин избягваме рекурсията i.e.:

if (Object.Equals(a,null) || Object.Equals(b,null))

така трябва да работи.

5
25/06/2015 12:49:01
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Да, така стана :)

Сега всичко си работи :)

Благодаря :)

0
petrovaliev95 avatar petrovaliev95 358 Точки

Ако не се бъркам мисля, че зацикляш във презаписването на "Equals" метода и "==" , "!=" операторите.

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Да, нещо такова се оказа, в проверките обаче.

0
petrovaliev95 avatar petrovaliev95 358 Точки

Точно в проверките да след като си презаписала операторите и сравняваш обекти от този тип се получава зацикляне.

0
LoKSET avatar LoKSET 160 Точки

Мисля, че не е много коректно тези проверки да са в операторите, те са статични и мисля че е по-правилно за тях да се ползва  return Country.Equals(a, b) а не a.Equals(b);

0
onefen avatar onefen 27 Точки

Колеги къде точно във видеото от лекцията се говореше за мутациите и сетването. Сигурен съм, че го имаше някъде, но не мога да го намеря точно къде. Все пак лекцията е над 3 часа. А в домашното на първа задача има такъв въпрос за мутациите.

0
LoKSET avatar LoKSET 160 Точки

Малко преди 2:18:00.

0
onefen avatar onefen 27 Точки

Aз го намерих вече, но все пак благодаря

:)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.