SORU
8 Mayıs 2011, Pazar


"arabirim üyesi" uygulamak; arayüzü ve beton farklı projelerde zaman hata olamaz

Bu derler:

public interface IMyInterface
{
    event Action<dynamic> OnSomeEvent;
}

class MyInterface : IMyInterface
{
    public event Action<dynamic> OnSomeEvent;
}

Ama arayüzü ve farklı projeler için uygulama ben ayrı, ben alıyorum:

Erişimci 'TestProject2.Myİnterface.OnSomeEvent.Kaldır' olamaz arayüzü üyesi uygulamak 'İnterfaceNamespace.Imyınterface.remove_OnSomeEvent(Sistemi.Eylem)' yazın 'TestProject2.'.Myİnterface Açık bir arayüz kullanımı uygulama.

Bu sadece dinamik bir parametre ile oluşur...

CEVAP
8 Mayıs 2011, Pazar


İyi yakaladın. Bu gibi görünüyormuhtemelenC bir hata# derleyici - Eric Lippert hakkında ne düşündüğünü görmek için bir sinyal göndereceğim. (dynamic biraz tricksy olabilir; bu hata için gayet iyi ama çok açık olmayan bir nedeni olabilir.)

DÜZENLEME:Aşağıdaki kod görüntülenirdeğilsonra işe.Bu sabah çalışma vardı yemin edebilirdim... ne kadar çok kafam karıştı. Simon yorumlar başı olarak, bu kod bir mesaj dilini desteklediği gibi değil ama başarısız.

Eğer unutmayınyapınaçık arabirim uygulaması kullanın, gayet iyi bir derleme gibi görünüyor:

// Doesn't actually compile - see edit above
class MyInterface : IMyInterface
{
    private Action<dynamic> foo;

    event Action<dynamic> IMyInterface.OnSomeEvent
    {
        // TODO (potentially): thread safety
        add { foo  = value; }
        remove { foo -= value; }
    }
}

Bu cevap hala geçerli . EDİT:

Açıkça uygulanan bir olay olarak alan bir olay belirtebilirsiniz unutmayın, yani bu çalışmıyor:

event Action<dynamic> IMyInterface.OnSomeEvent;

Aşağıdaki hata iletisini verir:

Test.cs(15,39): hata CS0071: olay kullanmanız gerekir bir olayın açık arabirim uygulaması erişimci sözdizimi

Ve eğersadeceolay erişimci sözdizimi değiştirmek için deneyin, aynı hatayı alıyorum orijinal kodu.

Bir özellik için olay değişiyor otomatik olarak uygulanan bir özellik bir uygulama ile düzgün çalıştığını unutmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • CruzerLite

    CruzerLite

    1 EKİM 2011
  • Photoshop Training Channel

    Photoshop Tr

    13 Temmuz 2012