Na jakim obiekcie klasy aktualnie pracuje.

0

Witam myślę, że temat nazwałem trafnie do problemu.

Mianowocie jako podsumowanie rozdziału z książki postanowaiłem napisać coś co zawiera wszystkie w nim omówione zagadniania.
I mam tutaj problem.

  • Mam metode PAYY która przyjmuje jako agrgument obiekt klasy i w zależności od niego ustala wartość zmiennej operacją "is".
 protected void Payy(Employee emp)
        {
            
            if (emp is Employees.Manger)
            {
                Pay = PackageLevel.GetHashCode() + Płaca.Manger.GetHashCode();
            }
            else if (emp is Employees.SalesPerson)
            {
                Pay = PackageLevel.GetHashCode() + Płaca.SalesPerson.GetHashCode();
            }
        }

To niby działa dobrze. Ale przy próbie przesłania obiektu pojawia się błąd.

 // Konstruktor klasy bazowej
 public Employee(string name, string ssn, int age, int id, Package.Package.PackageLevel package,Employee emp)
        {
            Name = name;
            SSN = ssn;
            Age = age;
            ID = id;
            PackageLevel = package;
            Payy(emp);
        }
// Konstruktor klasy potomnej 
public Manger(string name, string ssn, int age, int id, int options, Package.Package.PackageLevel package,Employee emp)
            : base(name, ssn, age, id, package,emp)

A tutaj tworzenie nowych obiektów.

 Object[] MyEmployess = { new Employees.Manger(),
                                       new Employees.Manger("Paweł ","00-00-00",17,0,7,Package.Package.PackageLevel.Platinium,Employees.Manger),
                                       new Employees.SalesPerson(),
                                       new Employees.SalesPerson("Robert","11-11-11",17,1,12,Package.Package.PackageLevel.Gold,Employees.SalesPerson) };

I w ostatnich argumentach coś jest nie tak.

Moje pytanie:
Dlaczego nie mogę tak przesłać tego?
Jak mogę sprawdzić w metodzie Payy czy aktualny obiekt jest którymś z potomych?
Próbowałem tak:

this.GetType() jak i samo GetType() 

Problem pewnie banalny i czegoś nie zrozumiałem. Dopiero sie uczę;p

0

Szczerze to niebardzo wiem co chcesz osiągnać i o co pytasz. Jeśli masz błąd przy tworzeniu tablic to może dlatego, że nie masz kontruktora domyślnego w tych klasach?

0

Widzę, że albo nie chcecie odpowiedzieć bo strzeliłem jakaś totalną gape albo nie wiecie jak może nie jasno opisałem problem?

0

Może opisz dokładnie o co chodzi. Gdzie masz błąd, jaki itp...

0

Prawdopodobnie ominąłeś rozdział o metodach wirtualnych, bo z tego powinieneś skorzystać.

0

Problem rozwiązany i jak myślałem był banalny.

 if (this is Manger)
// ... 

Nie myślałem że można używać samego this...

0

Czyli zrobiłeś klasę bazową, która ma posiadać wiedzę o klasach z niej dziedziczących? Czy ja już powinienem iść spać? Ale jeśli tak zrobiłeś to trochę to nielogiczne. Ale ja się nie znam...

0

ace4ur:

  1. Po co zrobiłeś klasę Package, skoro jedyny jej element to publiczny Enum?!
  2. Klasa bazowa Employee NIE MA PRAWA odwoływać się do klas dziedziczących (Manager, SalesPerson). Co w sytuacji, gdy pojawi się nowa klasa dziedzicząca? Będziesz poprawiał klasę bazową? Absurd!
  3. Dlaczego zmienna MyEmployees w metodzie Main (poza tym, że zmienne zaczynamy małą literą) jest tablicą object, a nie Employee?
0
  1. Tak nie jest ok. Po jasną cholerę ten Enum ma być w klasie? Umieść go poza klasą.
  2. Klasa bazowa nie może korzystać z klas pochodnych, bo w momencie pisania klasy bazowej one jeszcze nie istnieją! Jak chcesz korzystać z czegoś, czego nie ma?
  3. Ma znaczenie, bo rzutowanie to zbędna i czasochłonna operacja. Poza tym, utrudnianie sobie życia jest głupotą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1