派生しEventWaitHandleてオーバーライドする新しいクラスを作成SetしResetて、何もしないか、例外をスローすることができます。実際には、仮想ではないnewため、実装を作成する必要があります。もちろん、独自の別の名前のメソッドを作成する必要があります。のように。可能ですが、それを行うことはお勧めしません。SetResetMyInternalSetMyInternalReset
代わりに、クライアントがイベントを設定またはリセットしてはならないことを文書化します。そうすると、予期しない動作が発生するためです。
をプロパティとしてWaitHandle保持する派生クラスを作成できます。その場合、クライアントコードはそれにアクセスできなくなります。何かのようなもの:AutoResetEventinternal
public class MyWaitHandle: WaitHandle
{
internal AutoResetEvent InternalEvent { get; private set; }
internal MyWaitHandle(AutoResetEvent event)
{
InternalEvent = event;
}
public override bool WaitOne(int32 timeout)
{
return InternalEvent.WaitOne();
}
}
保護されたDispose(Boolean)メソッドをオーバーライドして、内部ハンドルを破棄する必要があります。また、他のWaitOneオーバーロードも必要になります。次に、とinternalの実装を作成するか、コードでを呼び出すことができます。SetResetInternalHandle.Set
私は今でも最善の行動はクライアントにそうしないように言うことだと思います。しかし、それを防ぐ必要がある場合は、上記が機能するはずです。