Derleyici Uyarısı (düzey 1) CS1911
Anonim bir yöntemden, lambda ifadesinden, sorgu ifadesinden veya yineleyiciden 'base' anahtar sözcüğü aracılığıyla 'name' üyesine erişim doğrulanamaz kodla sonuçlanabilir. Erişimi, içeren türdeki bir yardımcı yönteme taşımayı göz önünde bulundurun.
Bir yineleyicinin base
veya anonim yöntemlerin yöntem gövdesi içinde anahtar sözcüğüyle sanal işlevlerin çağrılması doğrulanamayan koda neden olur. Geri alınamayan kod kısmi bir güven ortamında çalıştırılamaz.
CS1911 için çözümlerden biri, sanal işlev çağrısını bir yardımcı işleve taşımaktır.
Aşağıdaki örnek CS1911 oluşturur.
// 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 geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin: