This is essentially what I want to do:

```
public abstract class Uniform<T>
{
    public readonly int Location;
    private T _variable;

    public virtual T Variable
    {
        get { return _variable; }
    }
}

public class UniformMatrix4 : Uniform<Matrix4>
{
    public override Matrix4 Variable
    {
        set
        {
            _variable = value;
            GL.UniformMatrix4(Location, false, ref _variable);
        }
    }
}

```

The getter for `Variable` will be the same across all derived classes, but the setter needs to be different.

In fact... I'd prefer not to have derived classes at all (it's only one function call that will differ for each type) but I can't think of how else to do it.

---

**Edit:** If it wasn't clear what the problem I'm having is, I'm getting a syntax error:

> 
> 'UniformMatrix4.Variable.set': cannot override because 'Uniform.Variable' does not have an overridable set accessor
> 
> 
> 

And I'm not sure how to create an "overridable set accessor"... `virtual` and `abstract` don't seem to be allowed on the setter.