C#言語をよりよく理解するために、これがコンパイルエラーである理由を知りたいと思います。C#なぜ「ベース」インターフェースをrefで渡すことができないのですか?
私のコードでは、私はIDisposableから派生するインターフェイス(IMyInterface)を持っています。私は 'ref IDisposable'型のパラメータを取る別のメソッドを持っています。しかし、IMyInterface型のメンバーvarをそのメソッドに渡すことはできません。ここに私のコード例は以下の通りです:
using System;
namespace CompileErrorBaseInterface
{
public interface IMyInterface : IDisposable { }
class Program
{
private IMyInterface _myInterfaceObj;
static void Main(string[] args) { }
public void ExampleMethod()
{
MyMethodBaseInterface(ref _myInterfaceObj); //compile error
MyMethodDerivedInterface(ref _myInterfaceObj); //no compile error
}
private void MyMethodBaseInterface(ref IDisposable foo) { }
private void MyMethodDerivedInterface(ref IMyInterface foo) { }
}
}
コンパイルエラーは、次のとおりです。
- 引数1: 'REF System.IDisposable' 最善のオーバーロードされたメソッドに 'REF CompileErrorBaseInterface.IMyInterface' から変換することはできません試合
- 'CompileErrorBaseInterface.Program.MyMethodBaseInterface(REF System.IDisposable)' のため、いくつかの無効な引数を持ってい
これはなぜ許可されていないのか、またはコンパイラが行うことができないのか誰にも説明できますか?ジェネリックスを使用した回避策があるので、なぜこのようにすることが許されないのか理解したいだけです。
ありがとうございました。