C#3.0

 もうinterfaceもいらないだろう。

interface IHoge
{
  string Name{ get; }
  int ID{ get; }
}

class Class1
{
  IHoge hoge;

  public Class1(IHoge hoge)
  {
    this.hoge = hoge;
  }

  public void Method()
  {
    Console.WriteLine("Name = {0}, ID = {1}", hoge.Name, hoge.ID);
  }
}

 これはC#1.0の考え方だ。C#3.0だと

class Class1<T>
{
  Func<T, string> Name{ get; set; }
  Func<T, int> ID{ get; set; }
  T Obj{ get; set; }

  public Class1(T obj, Func<T, string> name, Func<T, int> id)
  {
    this.obj = obj;
    Name = name;
    ID = id;
  }

  public void Method()
  {
    Console.WriteLine("Name = {0}, ID = {1}", Name(Obj), ID(Obj));
  }
}

 コッチの方がずいぶん手軽で自由に出来る。