Homework: Common Type System


0

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

Не намерих тема за последното домашно, а аз лично изпитвам затруднения и исках да попрочета и споделя.

Първото нещо, което ме озадачи е, че по-подразбиране за Problem 4: Person class трябва да направим магията с IS и AS, обаче аз лично не разбирам как да ги имплементирам, може ли някой да обясни какво точно се иска там, не като краен резултат, а като конкретно структуриране на кода и ползване на конкретни функционалности?

И второто нещо, което ме затрудни е свързано с Problem 5. 64 Bit array. Права си го подобно на LinkedList, имплементирам си аз IEnumerable<int> нещата се foreach-ват, обаче ми се налага да каствам:

public IEnumerator<int> GetEnumerator() { BitArray64 currentItem = this; while (currentItem._nextMember != new BitArray64(0, null)) { yield return (int)currentItem._number; currentItem = currentItem._nextMember; } }

Проблеми идват и след като си override-на Equals и имплементирам операторите !=, == :

public override bool Equals(object obj) { var bitArr = (BitArray64)obj; return this._number == bitArr._number; } public static bool operator ==(BitArray64 first, BitArray64 second) { return first.Equals(second); } public static bool operator !=(BitArray64 first, BitArray64 second) { return !first.Equals(second); }

Проблема идва като му подам null, гърми NullArgumentException, как да го заобиколя това нещо?

Ако проверя дали е null по-някакъв начин ще ми гръмне стека от рекурсии, как да му кажа, ако единя обект е null върни false?


в C# OOP от Vanchu (19 точки)


Отговори



0
Някой може ли да разясни условието на 64 bit array, аз разбирам, че трябва да подадем ulong число, и самият масив да представлява 64-те бита на числото ? 

от magadisho (823 точки)


0

Прав си колега, аз съм в грешка. Доста съм си усложнил живота, не че е лошо, ама загубих време. Благодаря ти ако можех да гласувам, щеше да имаш един тъмбъп от мене :). Все пак ако някой може да каже дали горните неща могат да се приложат към LinkedList ще съм благодарен, а и за проблем 4 също :)


от Vanchu (19 точки)


2

Домашно от мен - цък

Малко със закъснение, но @Vanchu прегледай (ако вече не си) темата от миналата година за това домашно, на мен лично доста ми помогна.


от Daniela_Popova (1125 точки)


0

не трябва ли като връщаш индекса, вместо

return this.bits[index];

да връщаш   this.bits[bits.length - 1 - index];

защото иначе то брои първия индекс като последен и съответно почва от другата страна на числото


от lllevski (1431 точки)

0
И аз връщам this.bits[bits.length - 1 - index]; щото помислих, че е по-готино. Колежката не е сгрешила щото тва не е уточнено в заданието. Само когато се връща така и ползваш индексатора 64BitArray[i] за външния обект, трябва да се внимава при Equals(), там трябва да вземаш стойностите от this.bits в същия ред, иначе ще се почудиш малко що не са равни 2те числа примерно. :)

от Vanchu (19 точки)



1
Домашно и от мен  --> ТУК <--     Дървото е в процес на създаване ;д

от lllevski (1431 точки)


0
Здравей, сега започвам да решавам 5та здача, и видях твоя въпрос за Equals. Същата проверка за null съм я направил в 3та задача. Предполагам че и тук ще е подобно.
public override bool Equals(object obj) { // If parameter is null return false. if (obj == null) { return false; } // If parameter cannot be cast to Student return false. // if( GetType() != obj.GetType()) {} Student st = obj as Student; if ((Object)st == null) { return false; } // Return true if the fields match: return this.SSN == st.SSN; }
Надявам се да съм помогнал.

от IvanAngelov (140 точки)