Co zrobić żeby uzyskać odpowiednik keyworda friend z C++?(Tylko internal,czy da się innaczej)

0

Czołem Bracia

W czym rzecz-mam sobie klasę manipulatora,klasę pomocniczą do animacji która to klasa posiada parę funkcji wirtualnych.Owe funkcje chcę uczynić możliwymi do wywoływania wyłącznie w klasie manipulatora albo w klasie pochodnej od animacji.Korzystając ze swego niemałego doświadczenia w C++ zapodałem protected dla owych funkcji oraz chciałem dać deklarację przyjaźni friend class Manipulator.
A TU DUPA,bo w tym złamanym C# NIE MA owego keyworda :/
Pogóglowałem ocb,i znalazłem takie coś:
http://social.msdn.microsoft.com/Search/en-US?query=friend%20class%20in%20c%23&beta=0&ac=1
http://stackoverflow.com/questions/203616/why-does-c-not-provide-the-c-style-friend-keyword
http://stackoverflow.com/questions/445490/what-is-the-equivalant-of-a-friend-keyword-in-c-sharp
Niestety,to internal wygląda tak prostacko,że mnie odrzuca-nie chcę dawać dostępu do funkcji animatora innym klasom niż manipulatorowi :/

Naprawdę nie ma sposobu na eleganckie rozwiązanie mojego problemu?

1

eleganckim rozwiązaniem jest zmiana projektu. albo zrezygnuj z osobnej klasy manipulatora, albo się zdecyduj, czy funkcja ma być prywatna czy publiczna.

0

A po co zaprzyjaźniać klasy, skoro można je zagnieździć? Efekt taki sam, a o dużo czytelniej wygląda.

Co prostackiego w internal też nie wiem. Jak niby w C++ niby robi się klasy dostępne jedynie wewnątrz jednej binarki? Trzeba zaprzyjaźniać z każdą klasą oddzielnie? Jeśli tak, to głupota.

0
somekind napisał(a)

A po co zaprzyjaźniać klasy, skoro można je zagnieździć? Efekt taki sam, a o dużo czytelniej wygląda.

Czekej,czekej Bracie...chcesz powiedzieć,że da się tak:

class Manipulator
{
     abstract Class Animation
     {
         protected virtual void func()
         {}
     }
}
Class Child_Animation : Animation (a może Manipulator.Animation?)
{
     override void func()
     {}
}

i będzie banglało tak jak sobie życzę?

0

Manipulator.Animation, no i Animation nie może być prywatne.

Tak w ogóle, to nie wiem co chcesz osiągnąć, ale chyba coś przekombinowałeś w projekcie aplikacji.

0

Hm tłumacząc na C++ takie coś ma być:

class Manipulator
{
//Zawiera listę wszystkich stworzonych animacji,listę aktualnie odtwarzanych oraz funkcje tworzące animacje.
//I ponieważ uruchomienie/zatrzymanie animacji wymaga zarazem updata listy odtwarzanych to stąd ma chęć,aby uniemożliwić używanie wirtualnych funkcji start/stop z klasy Animation.
//Ostatecznie,zawsze mogę się ratować wysyłaniem eventa,ale zależy mi na szybkości i prostocie,bo to do wymagającej gry komputerowej ma iść.
};
Class Animation
{
friend class Manipulator;
protected:
    konstruktor
    virtual void func()=0;//jest ich tu parę,konkretnie play,reverse,stop itp

public:
    sporo zmiennych;
};
Class Child_Animation : public Animation
{
protected:
     konstruktor
     void func()
     {}
};

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