SORU
21 ŞUBAT 2010, Pazar


Yanlış bir şey C dinamik kelime# 4.0 ile.

# 4.0 C dinamik kullanımı ile bazı garip davranışları vardır:

using System;

class Program {
  public void Baz() { Console.WriteLine("Baz1"); }
  static void CallBaz(dynamic x) { x.Baz(); }

  static void Main(string[] args) {
    dynamic a = new Program();
    dynamic b = new { Baz = new Action(() => Console.WriteLine("Baz2")) };

    CallBaz(a); // ok
    CallBaz(b); // ok
    CallBaz(a); // Unhandled Exception:
    // Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:
    // The name 'Baz' is bound to a method and cannot be used like a property
  }
}

Visual Studio 2010 Release Candidate kullanıyorum.

Bu bir hata mı? Eğer doğruysa, bu Sürümde sabit olacak mı?

CEVAP
22 ŞUBAT 2010, PAZARTESİ


Bu gerçekten bir hata olduğunu teyit edebilirim. Burada olan biteni bir an önce açıklama aşağıdaki gibidir: CallBaz, üç kez. çağrılan tek bir callsite var Bu callsite derleyici bir GetMember bir takip buna rağmen, aslında, çözmek olabilir# sözdizimi, Çağırmak C verilen yapabileceği en iyi tahmin, çünkü bir InvokeMember.

Bu callsite ikinci yürütülürken, bu gerçekten çalışma zamanı bulan bağlayıcıdır. Ve bu yüzden bir GetMember bir takip çağırmak için bir erteleme üretir. Hata bu erteleme düzgün argüman anonim tür olduğu için, kendini kısıtlamak değildir. Bu nedenle, üçüncü infaz erteleme devreye girer ve GetMember tabii ki başarısız olan Programa bağlamak için çalışır.

Bu bulduğun için teşekkürler. Eric belirttiği gibi, çok geç bir aşamada buradayız ve biz gemi önce sorunları düzeltmek için zor oluyor. Ama biz de doğru ürün sevk etmek istiyor. Bu başarılı olmayabilirim ama almak karar vermek için elimden geleni yapacağım. Eğer başka bir şey gelirse, lütfen benimle temas kurmaktan çekinmeyin. =)

GÜNCELLEME:

VS 2010 ve C# 4 son sürüm o zaman gemiler nasıl görüneceğini garanti edebilirim ancak, bu düzeltme iterek başarılı olduğumu söyleyebilirim. Bugünkü yayın escrow build doğru kodunuzu davranır. Bazı felaket engelleme, bu sürümde sabit göreceksiniz. Tekrar teşekkürler. Sana bir bira borcum var.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ayite Atiwoto (superjiffrey)

    Ayite Atiwot

    29 EYLÜL 2010
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007
  • Snazzy Labs

    Snazzy Labs

    9 Aralık 2008