interfaceを実装していながら公開しないってワザがありますな。
public interface IFoo {
void foo();
}
public class FooImpl : IFoo {
void IFoo.foo() { }
}
「明示的な実装」てやつ。
このとき FooImpl.foo() は private になるんだけども、
private void IFoo.foo() みたく privateで修飾するとエラーになるのね。
interface で event 定義しておきながら、実装ではそのeventがprotectedに
なってるのを見つけ、どうやってんだ? とコード覗いたら:
public delegate void FooHandler();
public interface IFoo {
event FooHandler FooHappen;
}
public class FooImpl : IFoo {
protected virtual event FooHandler FooHappen;
event FooHandler IFoo.FooHappen {
add { this.FooHappen += value; }
remove { this.FooHappen -= value; }
}
}
あ、なるほどねー