Mam klasę, która jest w większości opakowaniem dla dużej tablicy i niektórych związanych z nią porządków. Mam funkcję, która przyjmuje parametr ref. Kiedy przekazuję instancję klasy do funkcji, chcę, aby tablica została wysłana.Przekazywanie jawnego rzutowania jako parametru ref (C#)
Zastanawiam się nad wyraźnymi rzutami. Powiedzmy, że mam jakąś funkcję, która ma parametr wartości bajtu [].
public void SomeFunction(ref byte[] someBytes);
A że mam jakąś klasę z przeładowanym wyraźnej obsady.
class SomeClass
{
byte[] someBytes;
public static explicit operator byte[](SomeClass someInstance)
{
return someInstance.someBytes;
}
}
Teraz chcę wywołać funkcję z klasy jako parametr
SomeClass someInstance = new SomeClass();
SomeFunction(ref (byte[]) someInstance);
Kompilator narzeka „ref lub out argument musi być zmienną cesji”. Nie jestem pewien, czy po prostu nie masuję poprawnie kompilatora, czy naprawdę nie można tego zrobić.
Uważałem wartości zwracanej właściwości lub funkcji, ale nie można przejść przez te ref (a po edukowanie siebie widzę dlaczego ...)
wolałbym nie robić tablica pole publicznego , ale to satysfakcjonuje kompilator. Przypuszczam może po prostu utworzyć lokalną zmienną do odwoływania się tablicę, ale to dodatkowy wiersz kodu przed i po każdym wywołaniu funkcji ...
EDIT: może warto zauważyć, że został napisany przez SomeFunction strony trzeciej i nie mam dostępu, aby to zmienić. Co gorsza, nie sądzę, aby ich parametr rzeczywiście musiał być ref ...
Tak więc okazuje się, że praktyczne rozwiązanie byłoby być albo pole publicznego lub krótki metoda, której jedynym celem jest, aby zatuszować stworzenie jakiejś zmiennej lokalnej przejść. Ja nie kilka kopanie i rodzajowych może pomóc , także. – ajs410
W porządku, prosty setter wystarczyłby do aktualizacji jakiejś inwentarza. Alternatywnie można utworzyć interfejs, który funkcja SomeFunction przyjmuje jako argument, a SomeInstance implementuje i implementować logikę za pośrednictwem tego interfejsu. –