SORU
11 EKİM 2012, PERŞEMBE


Neden yok C# statik bir yöntem bir örnek yöntemi çağırır derleyici hata kodu değil mi?

Aşağıdaki kodu statik bir yöntem, Foo(),, 3**: örnek bir yöntem olarak nitelendirdi

public sealed class Example
{
    int count;

    public static void Foo( dynamic x )
    {
        Bar(x);
    }

    void Bar( dynamic x )
    {
        count  ;
    }
}

Hata olmasan derler ama zamanında zamanı bağlayıcı bir durum oluşturur. Bu yöntemler için dinamik parametre çıkarma beklendiği gibi bir derleyici hatası neden olur.

Neden dinamik bir parametre olan kod derlenecek izin veriyor mu? ReSharper bir hata olarak göstermiyor.

Edit 1:Visual Studio *2008

Edit 2:bir alt sınıf Bar(...) statik bir yöntem içermesi mümkün olduğu sealed ekledi. Hatta mühürlü sürümü herhangi bir yöntem örnek yöntemi dışında zamanında demek mümkün değil derler.

CEVAP
11 EKİM 2012, PERŞEMBE


Nedense, aşırı çözünürlük her zaman en iyi eşleşme buluröncestatik olmayan statik karşı denetleniyor. Tüm statik türleri: bu kodu deneyin lütfen

class SillyStuff
{
  static void SameName(object o) { }
  void SameName(string s) { }

  public static void Test()
  {
    SameName("Hi mom");
  }
}

Bu en iyi aşırı bir string Bir alıyor çünkü derlenir değil. Ama hey, bu bir örnek yöntemi, derleyici şikayet eder (yerine ikinci en iyi aşırı alınması).

Ayrıca: Özgün Soru dynamic örnek açıklaması tutarlı olmak için, bu Yüzden bence, türleri dinamik zaman biz deilken iyi aşırı yükleme (yalnızca parametre sayısını kontrol vb. parametre türleri bulacaksınız statik olmayan) vs. değil statik ve teksonrastatik kontrol edin. Ama bu statik kontrol zamanı gelene kadar beklemek anlamına gelir. Dolayısıyla, gözlenen davranış.

Son bir ilave: bu komik düzen this blog post by Eric Lippert hesaplanabilir şeyler yapmak için seçtiler hakkında Bazı bilgiler.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • Gee Cee

    Gee Cee

    1 AĞUSTOS 2009
  • LimeFire

    LimeFire

    2 ŞUBAT 2012