Bu, .Net'deki (özellikle C#) Uzantı Yöntemi görünürlüğü hakkında bir sorudur ve neden intellisense işe yarayabilir, ancak derleyici aynı kod parçasında başarısız olur..Net Uzantı Yöntemi (bu dize Foo) Yalnızca Kısmen Görünür
Picture bu ...
Ben .Net nesneleri bir grup ve tek Uzatma Yöntemleri sınıfın oluşan 3.5 sınıf kütüphanesi. bu farklı bir ad olduğundanusing MyApp.Extensions;
: İşte yöntemlerden biridir:
namespace MyApp.Extensions
{
public static class ExtensionMethods
{
public static string ToTitleCase(this string Origcase)
{ string TitleCase = Origcase;
... implementation ...
return TitleCase;
}
}
sınıf kitaplığından kendi içinde uzatma yöntemleri kullanmak için yöntemlerden birini gerektiren her sınıf belirtmek gerekiyor kütüphanenin kalanından daha fazla. Bütün bunlar iyi çalışıyor.
Şimdi, bir .Net 2.0 web sitesi bu kitaplığa uygun şekilde başvurur ve kitaplık kullanmak isteyen bir sınıf dosyası. Yani o olduğunu bildirir: GÖRÜNÜYOR
using MyApp.Extensions
sadece iyi çalışmak ve bir dize yazarken, IntelliSense uzatma yöntemi bir dize örneği kapalı sarkan görür: Seviyorum
http://www.flipscript.com/test/ToTitleCase.jpg
Bir plan bir araya geldiğinde! Bununla birlikte, bu neşenin sonu budur.
web sitesi oluşturma girişiminde, inşa şu iletisiyle başarısız olur:
http://www.flipscript.com/test/titlecaseerror.jpg
doğrudan web projeye ExtensionMethods sınıfını kopyalamaya çalışırken, inşa yine başarısız olur. Bu sefer, çünkü "bu" kelimesi beklenmiyordu. (Böylece sorunu "bu" anahtar sözcüğü ile aslında değil)
http://www.flipscript.com/test/titlecaseok.jpg
... ve Yapı gayet güzel çalışıyor:
Garibi, uzatma yöntemi normal statik yöntemi olarak çalışır . Aslında, build, ExtensionMethods sınıfının sınıf kitaplığında mı yoksa web sitesinde mi olduğunu çalışır. Başka bir deyişle, bu sorunu çözüyor ve yapı başarılı olacak.
... ama çözüm berbat.
Soru: Uzantı Yöntemlerinin bu senaryoda düzgün şekilde çalışmasını sağlamak için bir çeşit gizli numara var mı?
http://www.flipscript.com/test/ToTitleCase.jpg
ben "ad System.Runtime.CompilerServices" hile denedim, ama bu yardım görünmüyordu.
Intellisense bir uzantı yöntemini doğru bir şekilde görmesine neden olur ve derleyici başarısız olur?
Not: Örnek değişken, 'FirstName' yerine 'name' olarak adlandırılmış olmalıdır, ancak siz bu fikri elde edersiniz.
Kutsal bok! Bu gerçekten hile yapmak gibiydi, Marc! – Flipster
Kullandığım üçüncü taraf web sitesi, bir .Net 2.0 sitesi kaldığını GEREKTİRİR. Bu gereksinimi ihlal ediyor mu? (Görmek için bazı testler yapacağım, ama cevabını, paranın doğru olduğu haliyle çarpacağım) – Flipster
Geri dönüp .Net 2.0 sitesi bu konuda şikayet etmezse bunu kabul edilen cevap olarak işaretleyeceğim "CompilerVersion" özelliği. – Flipster