C#为什么可以';“我通过了”;“基础”;参照接口?
我想知道为什么这是一个编译错误,以便更好地理解C语言 在我的代码中,我有一个从IDisposable派生的接口(IMyInterface)。我有另一个方法,它接受“ref IDisposable”类型的参数。但我不能将IMyInterface类型的成员变量传递给该方法。下面是我的示例代码:C#为什么可以';“我通过了”;“基础”;参照接口?,c#,oop,interface,ref,C#,Oop,Interface,Ref,我想知道为什么这是一个编译错误,以便更好地理解C语言 在我的代码中,我有一个从IDisposable派生的接口(IMyInterface)。我有另一个方法,它接受“ref IDisposable”类型的参数。但我不能将IMyInterface类型的成员变量传递给该方法。下面是我的示例代码: using System; namespace CompileErrorBaseInterface { public interface IMyInterface : IDisposable { }
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'转换 CompilerErrorBaseInterface.IMyInterface'到'ref System.IDisposable' 匹配的最佳重载方法
- 'CompilerErrorBaseInterface.Program.MyMethodBaseInterface(参考 System.IDisposable“”具有一些无效参数
谢谢。考虑以下示例:
private void MyMethod(ref IDisposable foo)
{
// This is a valid statement, since SqlConnection implements IDisposable
foo = new SqlConnection();
}
如果允许您将IMyInterface
传递给MyMethod
,则会出现问题,因为您刚刚将SqlConnection
(不实现IMyInterface
)类型的对象分配给IMyInterface
类型的变量
有关更多详细信息,请查看C#guru Eric Lippert的以下博客: