funkcje zaprzyjaźnione

0

Witam, wiem że w c# nie ma funkcji zaprzyjaźnionych, dlatego czym można je zastąpić? albo w ogóle można zrobić to inaczej, chciałbym żeby klasa Żółty miała w sobie tę samą metodę co Czerwony, tylko że ze zmienionymi tablicami domekX i domekY, a nie chcę kopiować niepotrzebnie ten sam kod, nie chcę też żeby Żółty dziedziczyło z Czerwony, ktoś pomoże?

class Gracz
    {
        public int[ ] wskaznikX = { 242, 271, 303, 334, 366, 366 };
        public int[] wskaznikY = { 95, 67, 38, 9, 9, 9 };
        public int[] tabX = new int[10];
        public int[] tabY = new int[10];
        public void tworzenietablicy()
        { }
    }

    class Czerwony:Gracz
    { 
        public int[] domekX = { 271, 303, 334, 366 };
        public int[] domekY = { 153, 153, 153, 153 };

        
        new public virtual void tworzenietablicy()
        {
            int l = 0;
            for (int k = 0; k < 6; k++)
            { tabX[k] = wskaznikX[k]; }
            for (int k = 6; k < 10; k++)
            {tabX[k] = domekX[l++]; }
            for (int k = 0; k < 6; k++)
            { tabY[k] = wskaznikY[k]; }
            l = 0;
            for (int k = 6; k < 10; k++)
            { tabY[k] = domekY[l++]; }
        }
    }

    class Żółty : Gracz
    {
        public int[] domekX = { 397, 397, 397, 397 };
        public int[] domekY = { 268, 240, 211, 182 };  
      
    }  ```
0

No to niech funkcja przyjmuje argumenty i sobie podasz odpowiednie.

0

Robienie w klasie bazowej pustej metody raczej jest słabe. Zrób jak mówi @szweszwe. W bazowej metoda co przyjmuje parametry.

2

Ani funkcje zaprzyjaźnione, ani dziedziczenie nie jest tu potrzebne. Cały kod może być w klasie Gracz, a zmienne domekX i domekY powinny być ustawiane przez konstruktor. No chyba że w C# parametryzowane konstruktory są antypaternem. Wtedy nie wiem

0

Napisz ten program jak wygladałby w C++ z funkcją zaprzyjanioną . Jestem ciekawy

2
dzik999 napisał(a):

Witam, wiem że w c# nie ma funkcji zaprzyjaźnionych, dlatego czym można je zastąpić?

Tym, czym każdą patologię - prawidłowym designem.

albo w ogóle można zrobić to inaczej, chciałbym żeby klasa Żółty miała w sobie tę samą metodę co Czerwony, tylko że ze zmienionymi tablicami domekX i domekY, a nie chcę kopiować niepotrzebnie ten sam kod, nie chcę też żeby Żółty dziedziczyło z Czerwony, ktoś pomoże?

Np. mógłbyś mieć po prostu metodę w klasie bazowej, która korzysta z abstrakcyjnych właściwości DomekX i DomekY, a klasy pochodne by je implementowały i dostarczały różnych danych.
Ale jak zauważył @Kamil Żabiński, Ty tu w ogóle nie potrzebujesz żadnego dziedziczenia ani klas innych niż gracz. Nowych klas nie tworzy się po to, aby mieć tę samą logikę z innymi danymi, do tego służą obiekty.

lion137 napisał(a):

A coś takiego? https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.internalsvisibletoattribute?redirectedfrom=MSDN&view=netframework-4.8

To służy do gwałcenia międzymodułowego, a nie międzyklasowego, i jest jednym z większych antypatternów.

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