2008-11-19 13 views

cevap

30

Hayır - daha fazlası var. ComponentModel, çalışma zamanı özellikleri gibi birkaç DLR türü şey yapmanızı sağlar. DataView sütunları bir kılavuza nasıl yansıtır - yansıma özellikleri değil - çalışma zamanı özellikleridir. Buradaki anahtar kelimeler ICustomTypeDescriptor ve TypeDescriptionProvider'dur.

Bu model aynı zamanda soyutlamaya ve indirmeye de olanak tanır. Eğer özelliklerine yansıma yapıyoruz Örneğin, HyperDescriptor düşünün - bu ben bu büyük performans artışı, önceden derlenmiş model için yansıma modelini takas için özel PropertyDescriptor uygulaması kullanan yazdığı bir yardımcı programdır.

Kullanım açısından

, diğer bazı farklılıklar vardır; ComponentModel, yalnızca bir üye üzerindeki herhangi bir öznitelik örneğini destekler (yansımadan farklı olarak, birden çok benzer özniteliğin izin verdiği durumlarda). Ve bu veri merkezlidir - bu nedenle, olaylar (öncelikli olarak değişim bildirimi için tasarlanmıştır) gibi özellikler mevcuttur, ancak hiçbir alan ve yöntem yoktur.

Aynı zamanda i18n için de iyi bir desteği vardır - çünkü DisplayName vb. Anında özelleştirilebilir. Bununla birlikte, ComponentModel yansıma verilerine bağlanmak istediği için LINQ (özellikle MemberExpression) gibi şeylerle (doğrudan) uyumlu değildir.

Son olarak, ComponentModel, PropertyGrid gibi nesneler tarafından IDE'de oldukça kullanıldı (bu, araç ipuçları için ekstra özellikler gibi işlerin nasıl yapıldığı gibi), ancak hemen hemen tüm UI veri bağlamasının ComponentModel aracılığıyla gerçekleşmesidir (DataTable'ı, sınıfları ve aklınıza gelen diğer her şeyi destekleyin).

+0

Bunun, tepelerden daha eski olduğunu biliyorum, ancak System.ComponentModel yansıması için kullanıyorsanız, LINQ'da yapabileceğiniz ve yapamayacağınız bazı şeyleri açıklayabilir misiniz? – wootscootinboogie

+0

@woot bu kısa bir cevap: LINQ ComponentModel hakkında önemli değil –

İlgili konular