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

Odpowiedz Nowy wątek
2011-10-12 12:08
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.[...]in%20c%23&beta=0&ac=1
http://stackoverflow.com/ques[...]de-the-c-style-friend-keyword
http://stackoverflow.com/ques[...]f-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?


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 2x, ostatnio: MasterBLB, 2011-10-12 13:45

Pozostało 580 znaków

2011-10-12 14:10
1

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

Pozostało 580 znaków

2011-10-12 15:12
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.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2011-10-12 15:13

Pozostało 580 znaków

2011-10-12 15:39
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ę?


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-10-12 17:23
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.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2011-10-12 17:27

Pozostało 580 znaków

2011-10-12 19:37
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()
     {}
};

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 3x, ostatnio: MasterBLB, 2011-10-12 19:43

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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