Compilerwaarschuwing (niveau 1) CS1911
Toegang tot lid 'name' via een basiswoord van een anonieme methode, lambda-expressie, query-expressie of iterator resulteert in niet-verifieerbare code. Overweeg om de toegang te verplaatsen naar een helpermethode voor het betreffende type.
Als u virtuele functies aanroept met het base
trefwoord in de hoofdtekst van de methode van een iterator of anonieme methoden, resulteert dit in niet-verifieerbare code. Niet-verifieerbare code kan niet worden uitgevoerd in een gedeeltelijke vertrouwensomgeving.
Een oplossing voor CS1911 is het verplaatsen van de aanroep van de virtuele functie naar een helperfunctie.
In het volgende voorbeeld wordt CS1911 gegenereerd.
// CS1911.cs
// compile with: /W:1
using System;
delegate void D();
delegate D RetD();
class B {
protected virtual void M() {
Console.WriteLine("B.M");
}
}
class Der : B {
protected override void M() {
Console.WriteLine("D.M");
}
void Test() { base.M(); }
D Test2() { return new D(base.M); }
public D CallBaseM() {
return delegate () { base.M(); }; // CS1911
// try the following line instead
// return delegate () { Test(); };
}
public RetD DelToBaseM() {
return delegate () { return new D(base.M); }; // CS1911
// try the following line instead
// return delegate () { return Test2(); };
}
}
class Program {
public static void Main() {
Der der = new Der();
D d = der.CallBaseM();
d();
RetD rd = der.DelToBaseM();
rd()();
}
}
.NET-feedback
.NET is een open source project. Selecteer een koppeling om feedback te geven: