Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A tag "name" a "name" típusú felülettagot "name" (név) valósítja meg. A felülettag futásidőben több egyezést is használ. Implementációtól függ, hogy melyik metódus lesz meghívva.
Ez a figyelmeztetés akkor hozható létre, ha két felületi metódust különböztetünk meg csak attól, hogy egy adott paraméterrel ref van-e megjelölve vagy azzal jelölve out. A legjobb, ha módosítja a kódot, hogy elkerülje ezt a figyelmeztetést, mert nem egyértelmű, vagy nem garantált, hogy melyik metódust hívja meg futásidőben.
Bár a C# különbséget tesz az és refa közöttout, a CLR ugyanazt látja. Amikor eldönti, hogy melyik metódus implementálja az interfészt, a CLR csak kiválaszt egyet.
A figyelmeztetés elkerülése
- Adjon módot a fordítónak a metódusok megkülönböztetésére. Megadhat például különböző neveket, vagy megadhat egy további paramétert az egyiken.
Példa
Az alábbi kód a CS1956-ot hozza létre, mivel a két Test metódus Base csak az ref/out első paraméter módosítójának különbségei között különbözik.
// cs1956.cs
class Base<T, S>
{
// This is the method that should be called.
public virtual int Test(out T x) // CS1956
{
x = default(T);
return 0;
}
// This is the "last" method and is the one that ends up being called
public virtual int Test(ref S x)
{
return 1;
}
}
interface IFace
{
int Test(out int x);
}
class Derived : Base<int, int>, IFace
{
static int Main()
{
IFace x = new Derived();
int y;
return x.Test(out y);
}
}