SORU
18 AĞUSTOS 2010, ÇARŞAMBA


Neden '' anahtar kelime uzatma yöntemi çağırmak için genişletilmiş bir sınıf içinde gereklidir

ASP.NET MVC bir ViewPage, e için bir uzantısı yöntemi oluşturduk.g:

public static class ViewExtensions
{
    public static string Method<T>(this ViewPage<T> page) where T : class
    {
        return "something";
    }
}

Bir Görünüm (ViewPage kaynaklanan) bu yöntem çağrılırken bir hata alıyorum "CS0103: The name 'Yöntem' geçerli bağlamda mevcut değilthis kullandığım sürece " arama için anahtar kelime:

<%: Method() %> <!-- gives error CS0103 -->
<%: this.Method() %> <!-- works -->

Neden this anahtar gereklidir? Yoksa o olmadan çalışır, ama bir şeyi Gözden kaçırıyorum?

(Bu yinelenen bir soru olmalı sanırım, ama bir tane bulmak mümkün değildi

Güncelleme:

Ben Robinson says, uzatma yöntemlerini çağırmak için sözdizimi sadece derleyici şeker gibi. Neden derleyici otomatik olarak bu anahtar gerektirmeden geçerli türünün temel türleri için uzantı yöntemleri kontrol edebilir mi?

CEVAP
18 AĞUSTOS 2010, ÇARŞAMBA


Birkaç puan

Öncelikle, önerilen özellik (örtülü "bu" uzatma yöntemi çağrısı)gereksiz. Uzatma yöntemleri ETMENİZ sorgu kapsam istediğimiz şekilde çalışması için gerekli olduğunu; alıcı her zaman SERİ çalışması için örtülü bu destek için gerekli değildir; bu nedenle sorgu belirtilmiştir.

İkinci olarak, bu özellik çalışıyorkarşıuzatma yöntemleri daha genel tasarım: yani, bu uzatma yöntemlerisen kendi türünü genişletmek için kendini geliştir izin veriruygulama biliyorsun ama kaynak kodu olmadığı için bir arayüz ve uygulama bilmiyorsun, ya da çünkü , ya.

Bir tür uzantısı yöntemi kullanıyorsunuz senaryosubu tür içindesana o zamanyapınkaynak kodu erişebilirsiniz.O zaman neden ilk etapta bir uzantısı yöntemi kullanıyorsunuz?Bir yazabilirsinizörnek yöntemieğer genişletilmiş tür kaynak kodlarına erişiminiz varsa kendiniz, sonra bir uzatma yöntemi kullanmak zorunda değilsiniz! Uygulamanız sonra uzatma yöntemleri mümkün olmayan nesne, özel durumuna erişmek zorunda yararlanabilirsiniz.

Daha kolay erişimi olan bir tür içinde uzatma yöntemleri kullanmak için yapılması örnek yöntemleri üzerinde uzatma yöntemleri kullanımını teşvik ediyor. Uzatma yöntemleri büyük, ama genellikle daha iyi eğer varsa bir örnek yöntemi kullanın.

Bu iki nokta dikkate alındığında, bu yükü artık dil designer özelliği yok açıklamak düşüyordeğilvar. Şimdi bunu açıklamak düşüyorgerekir. Özellikleri maliyete sahip. Bu özellik gerekli değildir ve uzatma yöntemleri belirtti tasarım hedefleri; neden bunu uygulama maliyeti miyiz? karşı çalışır Bu özellik etkin açıklamak ve gelecekte uygulanması göz önünde olacak. Bunu kanıtlayan çekici, önemli herhangi bir senaryo göremiyorum, ama belki de kaçırdım bir tane var.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DrePwn

    DrePwn

    22 Temmuz 2011
  • J Medema

    J Medema

    11 EKİM 2006
  • TechRax

    TechRax

    21 EYLÜL 2009