Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object initializer with explicit interface in C#

How can I use an object initializer with an explicit interface implementation in C#?

public interface IType
{
  string Property1 { get; set; }
}

public class Type1 : IType
{
  string IType.Property1 { get; set; }
}

...

//doesn't work
var v = new Type1 { IType.Property1 = "myString" };
like image 650
Ben Aston Avatar asked Apr 05 '10 11:04

Ben Aston


1 Answers

You can't. The only way to access an explicit implementation is through a cast to the interface. ((IType)v).Property1 = "blah";

You could theoretically wrap a proxy around the property, and then use the proxy property in initialization. (The proxy uses the cast to the interface.)

class Program
{
    static void Main()
    {
        Foo foo = new Foo() { ProxyBar = "Blah" };
    }
}

class Foo : IFoo
{
    string IFoo.Bar { get; set; }

    public string ProxyBar
    {
        set { (this as IFoo).Bar = value; }
    }
}

interface IFoo
{
    string Bar { get; set; }
}
like image 154
Anthony Pegram Avatar answered Oct 05 '22 10:10

Anthony Pegram