Search code examples
c#variablespointersboxingtyped

Pointers to a typed variable in C#: Interface, Generic, object or Class? (Boxing/Unboxing)


First of all, I apologize if this has been asked a thousand times. I read my C# book, I googled it, but I can't seem to find the answer I am looking for, or I am missing the point big time.

I am very confused with the whole boxing/unboxing issue. Say I have fields of different classes, all returning typed variables (e.g. 'double') and I would like to have a variable point to any of these fields. In plain old C I would do something like:

double * newVar;
newVar = &oldVar;
newVar = &anotherVar;
...

I have a timer calls a function and passes the value of the referenced variable:

ChartPlotData(*newVar);

The reason why I am looking for a pointer is because newVar changes at runtime, linked to an Event:

public void checkbox_Clicked(object sender ...)
  if (sender == checkbox1) value = &object1.field1;
  if (sender == checkbox2) value = &object2.field1;

How can this be done in C#?

EDIT1: Explained purpose of referencing.

EDIT2: Made some incorrect statements, deleted them and shortened the question.


Solution

  • You could have a click event, as suggested in your edit, and then use a delegate to select the data to be passed to the control. I'm not sure if that'll meet your performance requirements though.

    ChartPlotData(valueSelector());
    
    // ...
    
    Func<double> valueSelector;
    
    protected void Checkbox_Click(object sender /* ... */)
    {
        if (sender == checkbox1) valueSelector = () => object1.field1;
        if (sender == checkbox2) valueSelector = () => object2.field1;
        // ...
    }
    

    (If you preferred, and if you're able to, you could overload your ChartPlotData method to accept a Func<double> rather than a plain double, and then invoke the selector delegate lazily inside the method rather than at the call site.)