自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

簡(jiǎn)單概括VB.NET默認(rèn)屬性

開發(fā) 后端
這里介紹VB.NET默認(rèn)屬性,VB或C#的編譯器對(duì)別人生成的類的默認(rèn)屬性應(yīng)該只能通過 DefaultMemberAttribute來判斷,所以我將一個(gè)VB類只用DefaultMemberAttribute指定一個(gè)默認(rèn)方法。

在向大家詳細(xì)介紹VB.NET默認(rèn)屬性之前,首先讓大家了解下TextBox的默認(rèn)屬性是Text,然后全面介紹VB.NET默認(rèn)屬性。在原先的VB6里,有一項(xiàng)奇特的功能——默認(rèn)屬性。在VB6中,對(duì)象的名稱可以直接表示該對(duì)象的默認(rèn)屬性。比如TextBox的默認(rèn)屬性是Text,所以下面的代碼

  1. Text1.Text = "Hello" 

就可以簡(jiǎn)化為

  1. Text1 = "Hello" 

這種簡(jiǎn)化給VB帶來了很多麻煩,賦值運(yùn)算就需要兩個(gè)關(guān)鍵字——Let和Set,結(jié)果屬性過程也需要Let和Set兩種。而且這種特征在后期綁定的時(shí)候仍能工作。到了VB.NET,這項(xiàng)功能被大大限制了,現(xiàn)在只有帶參數(shù)的屬性才可以作為默認(rèn)屬性。如

  1. List1.Item(0) = "Hello" 

可以簡(jiǎn)化為

  1. List1(0) = "Hello" 

這種語法讓有默認(rèn)屬性的對(duì)象看起來像是一個(gè)數(shù)組。那么VB怎么判斷一個(gè)屬性是否是默認(rèn)屬性呢?看下列代碼

  1. Public Class PropTest  
  2. Public Property P1(ByVal index As Integer) As String  
  3. Get  
  4.  
  5. End Get  
  6. Set(ByVal Value As String)  
  7.  
  8. End Set  
  9. End Property  
  10.  
  11. Default Public Property P2(ByVal index As Integer) As String  
  12. Get  
  13.  
  14. End Get  
  15. Set(ByVal Value As String)  
  16.  
  17. End Set  
  18. End Property  
  19. End Class 

P1和P2兩個(gè)屬性基本上完全相同,***的不同是P2帶有一個(gè)Default修飾符。反匯編這個(gè)類以后,可以發(fā)現(xiàn)兩個(gè)屬性完全相同,沒有任何差異。但是PropTest類卻被增加了一個(gè)自定義元屬性System.Reflection.DefaultMemberAttribute。這個(gè)元屬性指定的成員是InvokeMember所使用默認(rèn)類型,也就是說后期綁定也可以使用默認(rèn)屬性??墒俏以囼?yàn)將DefaultMember元屬性手工添加到類型上卻不能達(dá)到讓某屬性成為默認(rèn)屬性的功能??磥磉@項(xiàng)功能又是VB的一項(xiàng)“語法甜頭”。但是,VB或C#的編譯器對(duì)別人生成的類的默認(rèn)屬性應(yīng)該只能通過 DefaultMemberAttribute來判斷,所以我將一個(gè)VB類只用DefaultMemberAttribute指定一個(gè)默認(rèn)方法,不使用 Default,然后將它編譯以后給C#用,果然,C#將它識(shí)別為一個(gè)索引器(indexer)!

既然說到了C#的索引器,我們就順便來研究一下VB和C#屬性方面的不同。剛才的實(shí)驗(yàn)結(jié)果是VB.NET默認(rèn)屬性在C#中就是索引器。但是VB仍然可以用屬性的語法來訪問默認(rèn)屬性,而C#只能用數(shù)組的語法訪問索引器。更特別的是,VB可以創(chuàng)建不是默認(rèn)屬性,但是帶有參數(shù)的屬性,如上面例子里的P1,而C# 則不支持帶參數(shù)的屬性,如果將VB編寫的,含有帶參數(shù)屬性的類給C#用,C#會(huì)提示“屬性不受該語言支持,請(qǐng)用get_XXX和set_XXX的語法訪問”。也就是說,帶參數(shù)的屬性是CLR的一項(xiàng)功能,但不符合CLS(通用語言規(guī)范),因此就會(huì)出現(xiàn)跨語言的障礙。這也更加深了我們對(duì)CLS的認(rèn)識(shí)——如果你希望讓你的代碼跨語言工作,請(qǐng)一定要注意符合CLS。

【編輯推薦】

  1. 詳細(xì)分析VB.NET WithEvents
  2. 淺析VB.NET局部靜態(tài)變量
  3. 原理分析VB.NET開發(fā)控件
  4. 自己動(dòng)手用代碼實(shí)現(xiàn)VB.NET ListView加載數(shù)據(jù)
  5. 詳細(xì)介紹VB.NET MyClass
責(zé)任編輯:佚名 來源: CSDN
相關(guān)推薦

2009-10-14 13:15:09

VB.NET數(shù)據(jù)綁定

2009-11-02 09:21:04

VB.NET文件系統(tǒng)

2009-10-30 10:19:43

VB.NET OBEX

2009-10-26 15:57:07

VB.NET使用Ora

2009-10-13 14:50:59

VB.NET Envi

2009-10-14 14:04:29

VB.NET創(chuàng)建Web

2009-10-14 10:19:57

VB.NET Doma

2009-10-15 17:50:48

VB.NET Spli

2009-10-13 09:24:57

VB.NET Dock

2009-10-20 10:23:08

VB.NET多線程編程

2010-01-18 11:20:13

VB.NET默認(rèn)屬性

2009-11-03 10:00:20

VB.NET New方

2009-10-14 15:34:29

VB.NET窗體編程模

2009-10-14 16:46:25

VB.NET OnSt

2009-10-21 10:05:30

VB.NET運(yùn)行環(huán)境

2009-10-23 14:06:07

VB.NET類對(duì)象

2009-10-27 11:32:42

VB.NET Disp

2009-11-03 10:51:33

VB.NET共享

2009-10-30 15:51:30

VB.NET使用缺省屬

2009-11-02 17:49:05

VB.NET抽象類
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)