2009-03-11 21 views
3

VB.NET'teki class/property niteliklerinin neden garip bir isteğe bağlı sözdizimine sahip olduğunu merak ediyorum:VB.NET'te isteğe bağlı sınıf özelliklerinin neden garip bir sözdizimi vardır?

<TestAttr("a", "abc", Optional1:="foo", Optional2:=3)> 

VB.NET, sipariş kısıtlamalarından kaçınmak için isteğe bağlı parametreleri ayarlamanızı sağlar (güzel) ama bu durumda seni buna zorluyor.

Örneğin, bu mümkün değildir:

<TestAttr("a", "abc", "foo", 3)> 

, parametreler orijinal tanım ile aynı sırada olsa bile.

Bunun için iyi bir neden var mı? Yoksa sadece .NET tasarımcıları konuyla ilgili tembel miydi?

cevap

4

İsteğe bağlı parametreleri burada adlandırılmış özellik argümanlarıyla karıştırıyor gibi görünüyor. Özniteliklerle, kurucuda karşılık gelen parametresi olmayan özniteliğin ortak alanını/özelliklerini ayarlamak yasaldır. VB.Net, ad sözdizimine göre çağırdığı aynı sözdizimine sahip olmayı seçti.

TestAttr'ı reflektörde açarsanız, sınıfın 2 argüman alan ve 2 public alanı olan Optional1 ve Optional2 adında bir kurucuya sahip olduğunu göreceksiniz.

+0

Asla bir özellik yazmamıştım, şimdi daha mantıklı. Kamusal alanda emir olmadığı için kullanılamaz. Şimdi mantıklı olun. –

0

Gerekli parametreler yapıcı parametreleridir. İsteğe bağlı olanlar, genel yazılabilir özellikler olarak bulunur. Tüm parametreleri sağlayan kurucuların oluşturulması gerekir. Her zaman işe yaramaz.