現在、一般的なリストクラスの削除機能をオーバーライドしようとしています。しかし私は、私のアプローチの1つの小さな部分、つまりRemoveメソッドの外のオブジェクトへの参照を苦労しています。オーバーライドリストの削除機能が失敗しました
public new void Remove(ref string item)
{
if (Count > 9)
{
Remove(this[0]);
}
base.Remove(item);
}
このメソッドは、実際のRemoveメソッドをオーバーライドしていないため、機能しません。
誰もこれを処理する方法を知っていますか?
EDIT:削除関数では、参照オブジェクトでメソッドを呼び出す必要があります。
EDIT2:私の現在のバージョン
class SocketList<WebSocketConnection>
{
private List<WebSocketConnection> theList = new List<WebSocketConnection>();
public void Remove(ref WebSocketConnection obj)
{
obj.Dispose();
theList.Remove(obj);
// additional stuff
}
}
しかし、このバージョンでは、参照されるオブジェクトのDisposeメソッドを呼び出すことはできません。私はこのオブジェクトのために利用可能なメソッドがないというメッセージを受け取りました。
EDIT3:これは私が彼らの非をvirtual
あるので、あなたはList<T>
の任意のメンバーを上書きcan't Disposeメソッドに
public class WebSocketConnection : IWebSocketConnection
{
{...}
// Flag: Has Dispose already been called?
private bool disposed = false;
// Instantiate a SafeHandle instance.
private SafeHandle handle = new SafeFileHandle(IntPtr.Zero, true);
{...}
// Public implementation of Dispose pattern callable by consumers.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Protected implementation of Dispose pattern.
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
handle.Dispose();
// Free any other managed objects here.
//
}
// Free any unmanaged objects here.
//
disposed = true;
}
}
あなたが望むのは簡単には不可能です。これを望んでいるあなたの理由は何ですか?好奇心だけですか、解決しようとしている大きな問題がありますか?その大きな問題はより有用な答えを得るかもしれません。 – hvd
本当に 'ref string item'-signatureが必要ですか?あなたのリストにはどのようなタイプの要素が含まれていますか?その中に文字列または複雑なオブジェクトがありますか? – HimBromBeere
代わりにIListの実装を検討しましたか? – user6144226