Zmienna ref

0

Witam

Nie mogę nigdzie doszukać się w jaki sposób przechowywać referencję. Jeśli ktoś ma jakiś ciekawy artykuł na ten temat chętnie poczytam:)
Chciałbym zrobić coś takiego:

private double _valueToChange;

public double ValueToChange
{
get { return _valueToChange; }
set { _valueToChange = value; }
}


public void SetValueToChange(ref double valueToChange, string headLine)
{
ValueToChange = valueToChange;
}

private void OrderNoteItemChangeValuePageConfOK_B_Click(object sender, EventArgs e)
{
ValueToChange = 1000;
}
0

po co chcesz coś takiego zrobić?
Generalnie w c# wskaźniki są be, a bez wskaźników tego nie zrobisz. Inna sprawa, że na 99,99% to co chcesz osiągnąć da się zrobić inaczej

1

Jak w C# przechowywać referencje? Np. tak:

Button b; // referencja!

Jeśli mowa o double:

class Wrap
{
    public double Value { get; set; }
}

Wrap w; // referencja!
0

class Wrap
{
public double Value { get; set; }
}

Wrap w; // referencja!

Ta klasa jest niepotrzebna. Zwykłe rzutowanie typu double na System.Object spowoduje przeprowadzenie operacji "boxing" (która jest owrapowywaniem) i zmienienia typu wartościowego na referencyjny.

0

Zgadzam się z Misiekd "że na 99,99% to co chcesz osiągnąć da się zrobić inaczej", ale ref i out zostały dane po to żeby ich używać. Oczywiście inna sprawa to umieć ich używać i rozumieć jaki i dlaczego działają.
Propozycja MSM opakowywania value type klasą żeby zasymulować reference type jest osobliwa. Da się, tylko po co.

1

Ta klasa jest niepotrzebna.

Niepotrzebna, ale to tak jakby wszędzie używać void* (C/C++). A gdyby z tego zrobić klasę generyczną Wrap<double> to byłoby jeszcze piękniej. No i przynajmniej masz pewność że Ci nie wyskoczy Exception podczas unboxingu.

0

Zwykłe rzutowanie typu double na System.Object spowoduje przeprowadzenie operacji "boxing" (która jest owrapowywaniem) i zmienienia typu wartościowego na referencyjny.

Genialne rozwiązanie, usuwać typowanie zmiennej..

NIe bój się, z powrotem można to rzutować tylko na ten typ, z jakiego rzutowano na object. Nie zrobisz w ten sposób inta z double.
Ale fakt, że w C++/CLI jest to lepiej zrobione — boksowanie zachowuje typ: bo z int robi się int^, a nie po prostu tylko object)

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