Ich möchte wissen, warum dies ein Kompilierungsfehler ist, um die C# Sprache besser zu verstehen.C# Warum kann ich nicht "Basis" -Schnittstelle durch Ref übergeben?
In meinem Code habe ich eine Schnittstelle (IMyInterface), die von IDisposable abgeleitet ist. Ich habe eine andere Methode, die einen Parameter vom Typ 'ref IDisposable' verwendet. Aber ich kann eine Member-Variable vom Typ IMyInterface nicht an diese Methode übergeben. Hier ist mein Beispielcode unten:
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) { }
}
}
Die Kompilierung Fehler sind:
- Argument 1: Konvertierung von 'ref CompileErrorBaseInterface.IMyInterface' auf 'ref System.IDisposable' Die besten überladene Methode Spiel für
- 'CompileErrorBaseInterface.Program.MyMethodBaseInterface (ref System.IDisposable)' hat einige ungültige Argumente
Kann irgendjemand erklären, warum dies für den Compiler nicht erlaubt oder nicht möglich ist? Ich habe eine Problemumgehung mit Generics, also möchte ich nur verstehen, warum es so nicht erlaubt ist.
Danke.