<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#和VB.NET中類型相關資料整理

      C#VB.NET中有一些和類型相關的方法和關鍵字,初學者剛開始理解可能會有點混亂,這里整理一下,希望對初學者有所幫助。如果大家有需要補充的內容,歡迎回復。

      1.GetType

      (1)Object.GetType()

      該方法是所有對象都有的方法,MSDN中的解釋是“獲取當前實例的 Type。”。該方法的返回值是System.Type類型的實例,表示當前實例的確切運行時類型。

      例如:

      C#:

      int number = 3;
      System.Type t 
      = number.GetType();
      Console.WriteLine(t.FullName); 
      //輸出:System.Int32

       

       VB.NET:

      Dim number as Integer = 3
      Dim t As System.Type = number.GetType()
      Console.WriteLine(t.FullName) 
      '輸出:System.Int32

        

      (2)VB.NET中的GetType方法

      參考MSDN中的解釋:返回指定類型的 Type 對象。Type 對象提供有關類型的信息,如類型的屬性、方法和事件。

      用法:GetType(typename),其中typename需要獲取其信息的類型的名稱

      例如:

      Dim t As System.Type = GetType(Integer)
      Console.WriteLine(t.FullName) 
      '輸出:System.Int32

       

      (3)Type.GetType系列方法

      System.Type類型中的GetType方法一共有4個,其中不帶參數的GetType()是繼承自Object的實例方法,其他三個是靜態方法(C#中為staticVB.NET中為Shared)。實例方法不用介紹了,就是Object.GetType()。靜態方法是通過類型名稱的字符串獲取System.TypeMSDN中的解釋有一大篇,這里只給出簡單示例:

      C#:

      System.Type t = Type.GetType("System.Int32");
      Console.WriteLine(t.FullName); 
      //輸出:System.Int32

       

      VB.NET

      Dim t As System.Type = Type.GetType("System.Int32");
      Console.WriteLine(t.FullName) 
      '輸出:System.Int32

       

      注意這里的類型名稱必須是包含命名空間的全名,即System.TypeFullName,不能是C#或者VB.NET中的類型名稱,如C#中的"int"或者VB.NET中的"Integer"

       

      2.typeof

      C#VB.NET中都有typeof關鍵字,但它們的用法卻不一樣。

      C#typeof相當于VB.NET中的GetType,用于獲取指定類型的 Type 對象

      用法

      System.Type t = typeof(int);
      Console.WriteLine(t.FullName); 
      //輸出:System.Int32

       

      VB.NET中的TypeOf則總是與Is關鍵字一起用于構造TypeOf…Is表達式。MSDN中對該關鍵字的解釋是:比較對象引用變量與數據類型。需要注意的是該表達式只能針對引用類型,如果把下面的示例中的i聲明為Integer則會出錯。

      VB.NET用法:

      Dim i As Object = 2
      Console.WriteLine(
      TypeOf i Is Integer'輸出:True
      Console.WriteLine(Typeof i Is Double'輸出:False

       

      3.is

      C#VB.NET中也都存在is關鍵字,當然它們的用法也不一樣。

      C#is 的作用是:檢查對象是否與給定類型兼容。它執行的是類型比較。MSDN中的備注:如果所提供的表達式非空,并且所提供的對象可以強制轉換為所提供的類型而不會導致引發異常,則 is 表達式的計算結果將是 true。請注意,is 運算符只考慮引用轉換、裝箱轉換和取消裝箱轉換。不考慮其他轉換,如用戶定義的轉換。

      可以認為C#中的is 相當于VB.NET中的TypeOf…Is

      用法:

      int i = 2;
      Console.WriteLine(i 
      is int); //輸出:True
      Console.WriteLine(i is double); //輸出:False

       

      VB.NETIs 的作用是:比較兩個對象引用變量。MSDN中的備注:Is 運算符確定兩個對象引用是否引用同一個對象。但是,它不執行值比較。如果 object1 和 object2 引用同一個對象實例,則 result 為 True;如果它們不引用同一個對象,則 result 為 False該運算符和TypeOf…Is一樣,也只適用于引用類型。

      用法:

      Dim i As String = "Hello"
      Dim j AS String = "Hello"
      Dim k as String = "Hello world"
      Console.WriteLine(i 
      Is j) '輸出:True
      Console.WriteLine(i Is k) '輸出:False
      = j
      Console.WriteLine(i 
      Is k) '輸出:True

       

      4.as

      同樣C#VB.NET里面都存在as,用法也不一樣。

      C#as 的作用是:as 運算符用于在兼容的引用類型之間執行轉換as 運算符類似于強制轉換操作。但是,如果無法進行轉換,則 as 返回 null 而非引發異常。

      expression as type 等效于 expression is type ? (type)expression : (type)null

      用法:

      string s = someObject as string;
      If(s 
      != null)
              Console.WriteLine(
      "someObject is a string");

       

      VB.NETAs 的作用是:引入 As 子句,該子句標識聲明語句中的數據類型或泛型類型參數中的約束列表。

      VB.NET中這個關鍵字太常見了,就不需要過多解釋。

      用法:

      Private i As Integer = 3 '聲明字段
      Dim j As String = "hello" '聲明變量
      Sub Test(ByVal k As Boolean'聲明參數
      Public Class MyClass(Of T As {IComparable, IDisposable, ClassNew}) '泛型類型約束

       

      5.類型轉換

      類型轉換是在編程過程中經常會遇到的。在這兩種語言中,有共同的方法,也有各自特有的方法。

      共同的方法是Convert類的使用,因為Convert類是System命名空間中的。該類中包含了各種常見類型的轉換方法,比如ToInt32, ToSingle, ToBoolean等,這些方法的返回值就是需要的類型,不需要經過轉換。Convert類中通用的類型轉換方法是ChangeType,該方法返回具有指定類型而且其值等效于指定對象的Object,這時候就需要對返回值進行顯示轉換了。

      C#

      double d = 1.234
      int i = (int)Convert.ChangeType(d,typeof(int));

       

      VB.NET

      Dim d As Double = 1.234
      Dim i As Integer = CInt(Convert.ChangeType(d,GetType(Integer)))

       

      關于顯式轉換

      C#中的顯式轉換的格式是(type)expression

      用法:

      double d = 1.234
      int i = (int)d;

      VB.NET中顯式轉換的格式是CType(expression,type)MSDN中關于CType的解釋:CType 是一個“內聯函數”,這意味著轉換是由已編譯的代碼執行的,通常不會生成函數調用。這將提高性能。

      用法:

      Dim d As Double = 1.234
      Dim i As Integer = CType(d, Integer)

       

      VB.NET中還有一系列函數與CType函數同屬于Conversion函數,例如CBool, CInt, CString, Hex, Format, Val等等,這些函數都是內聯函數,具體的用法可以參考MSDN

       

      另外在VB.NET中還包含兩個特殊的轉換方法,DirectCastTryCast。這兩個方法和CType的用法一樣,它們的區別見下表。

      關鍵字

      數據類型

      參數關系

      CType

      任何數據類型

      必須在兩種數據類型之間定義擴大轉換或收縮轉換

      DirectCast

      任何數據類型

      一個類型必須繼承或者實現另一個類型

      TryCast

      僅引用類型

      一個類型必須繼承或者實現另一個類型

       

      從上表可以看出,VB.NETTryCastC#as作用是一樣的。

       

      DirectCast示例(摘自MSDN):

      Dim q As Object = 2.37
      Dim i As Integer = CType(q, Integer)
      ' The following conversion fails at run time
      Dim j As Integer = DirectCast(q, Integer)
      Dim f As New System.Windows.Forms.Form
      Dim c As System.Windows.Forms.Control
      ' The following conversion succeeds.
      = DirectCast(f, System.Windows.Forms.Control)

       

      TryCast示例(摘自MSDN):

      Function PrintTypeCode(ByVal obj As ObjectAs String
          
      Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
          
      If objAsConvertible Is Nothing Then
              
      Return obj.ToString() & " does not implement IConvertible"
          
      Else
              
      Return "Type code is " & objAsConvertible.GetTypeCode()
          
      End If
      End Function

       

      6.Parse相關方法

      在很多類型中還存在著一種針對字符串的類型轉換方法,即ParseTryParse。這兩個方法都是靜態方法,接受的參數為字符串,將指定類型的字符串表示形式轉換為該類型的等效值。不同的是Parse轉換失敗則拋出錯誤,而TryParse則可以通過返回的邏輯值值了解轉換是否成功。這兩個方法的用法如下:

      C#

      int i = int.Parse("123"); //正確
      int j = int.Parse("123.4"); //拋出錯誤
      int k = 0;
      //下面輸出:False_0
      Console.WriteLine(int.TryParse("456.7"out k).ToString() + "_" + k.ToString());
      //下面輸出:True_789
      Console.WriteLine(int.TryParse("789"out k).ToString() + "_" + k.ToString());

       

      VB.NET

      Dim i As Integer = Integer.Parse("123"'正確
      Dim j As Integer = Integer.Parse("123.4"'拋出錯誤
      Dim k As Integer = 0
      '下面輸出:False_0
      Console.WriteLine(Integer.TryParse("456.7", k).ToString() & "_" & k.ToString())
      '下面輸出:True_789
      Console.WriteLine(Integer.TryParse("789", k).ToString() & "_" & k.ToString())

       

      7.空值的比較

      空值在C#中為null,在VB.NET中為Nothing。雖然這兩個關鍵字看起來似乎一樣,但它們有所不同。

      C#中的解釋:null 是引用類型變量的默認值。在C#中判斷變量是否是空值,通過expression == null或者expression != null即可,即使expression是值類型也不會拋出錯誤,不過會有警告信息。例如下面的代碼:編譯時會提示如下警告信息:由于“int”類型的值永不等于“int?”類型的“null”,該表達式的結果始終為“false”。

      int i = 0;
      Console.WriteLine(i 
      == null); //輸出:False
      = null//錯誤

       

      VB.NET中的解釋:Nothing表示任意數據類型的默認值。將 Nothing 賦給變量將把該變量設置為其聲明類型的默認值。如果該類型包含變量成員,則這些成員都會設置為其默認值。這里的解釋和C#不一樣,可以是任何數據類型,下面的代碼中會給出驗證。VB.NET中判斷變量是否為空值,可以用expression = Nothingexpression <> Nothing expression Is Nothingexpression IsNot Nothing等來判斷。一般值類型用前面兩種,引用類型用后面兩種。編寫如下代碼測試:

      Dim i As Integer = 0
      Console.WriteLine(i 
      = Nothing'輸出:True。可以看出Nothing在此表示0,是Integer的默認值。
      = 1
      Console.WriteLine(i 
      = Nothing'輸出:False
      = Nothing
      Console.WriteLine(i 
      = Nothing'輸出:True
      Console.WriteLine(i) '輸出:0。再次驗證Nothing和0等價。
      '
      Console.WriteLine(i Is Nothing) '報錯,Is的操作數必須是引用類型或可為null的類型。

      Dim s As String
      Console.WriteLine(s 
      & "abc"'輸出:abc
      Console.WriteLine(String.IsNullOrEmpty(s)) '輸出:True
      Console.WriteLine(s = Nothing'輸出:True
      Console.WriteLine(s Is Nothing'輸出:True。

      = ""
      Console.WriteLine(
      String.IsNullOrEmpty(s)) '輸出:True
      Console.WriteLine(s = Nothing'輸出:True。Nothing表示String的默認值""。
      Console.WriteLine(s Is Nothing'輸出:False。
      = Nothing
      Console.WriteLine(
      String.IsNullOrEmpty(s)) '輸出:True
      Console.WriteLine(s = Nothing'輸出:True
      Console.WriteLine(s Is Nothing'輸出:True
       
      Dim c As SomeClass
      '沒有為類型"SomeClass"和"SomeClass"定義運算符"="
      '
      Console.WriteLine(c = Nothing)
      Console.WriteLine(c is Nothing'輸出:True
      = New SomeClass()
      Console.WriteLine(c 
      is Nothing'輸出:False

      以上代碼可以看出VB.NET中對Nothing的處理的特殊之處。通過SharpDevelop轉換這些VB.NET代碼成C#代碼,把所有Nothing都轉換成null了,VB.NET中的"=""Is"都轉換成"==",很顯然代碼無法通過編譯。通過ReflectorC#模式查看代碼,"=""Is"也都轉換成"==",但"i = Nothing"都轉換成"i == 0",這才是正確的代碼。可以看出VB.NET的編譯器在背后做了一些轉換的工作。

      既然VB.NET能夠把Nothing解釋為默認值,C#里有沒有一個獲取默認值的功能呢?當然有,那就是default。用法是default(typename),比如Console.WriteLine(default(int));這句代碼輸出0。通過Reflector查看,這句代碼被轉換成了Console.WriteLine(0);又是編譯器在背后做了工作。

       

      8.可空類型

      首先看一下可空類型的說明:表示基礎類型為值類型的對象,值類型與引用類型一樣也可以分配 null 引用(在 Visual Basic 中為 Nothing)。

      某些值類型并不總是具有(或需要)已定義的值。在可能沒有為某些字段賦予任何值的數據庫中,這是常見的實際情況。例如,您可以將 null 值賦予數據庫字段以表示尚未給該數據庫字段賦值。通過可空類型,可以向一個類型的默認值范圍中再添加一個為空的值。

      可空類型在系統中有一個專門的類型,Nullable,一般使用泛型可空類型,C#Nullable<T>VB.NETNullable(Of T)。除了采用類名稱來定義外,在這兩種語言中都有簡寫形式的定義,下面代碼中的定義是等價的:

      C#

      Nullable<int> i = null;
      int? j = null;

       

      VB.NET

      Dim i As Nullable(Of Integer= Nothing
      Dim j? As Integer = Nothing 'VS2005不支持這種寫法

       

      定義為可空類型的變量,可以和原始類型的變量一起進行運算,比如i+j,但是需要判斷該變量是否有值,否則可能出錯。判斷可空類型的變量是否有值,可以通過HasValue屬性來判斷,然后通過Value屬性來獲取值。可空類型還有一個方法,GetValueOrDefault,如果有值,則獲取Value,如果為空,則獲取基礎類型的默認值。詳細用法請參考MSDN

      另外在C#中還有一個特殊的運算符??,該運算符的用法為j = i ?? 5;意思是如果i不為空,則返回i的值,否則返回5。查看MSDN中的解釋:如果 ?? 運算符的左操作數非 null,該運算符將返回左操作數,否則返回右操作數。通過該運算符可以簡化判斷取值的方法。

       

      9.空數據類型

      在系統還存在一種特殊的類型,DBNull。在操作數據庫的時候,獲取的數據項沒有值,這個數據項可能不是nullNothing),而是DBNull。下面驗證這兩個值的不同:

      C# 

      Console.WriteLine(DBNull.Value == Nothing); //輸出:False

       

      VB.NET

      Console.WriteLine(DBNull.Value Is Nothing' 輸出:False

       

      在使用DBNull的時候必須使用DBNull.Value,如下:

      C#

      object item = row[0];
      Console.WriteLine(item 
      != DBNull.Value);

       

      VB.NET

      Dim item As Object = row(0)
      Console.WriteLine(item 
      = DBNull.Value)

       

      本文就寫到這里了,希望對初學者有所幫助。因為代碼比較簡單,其中的變量使用了簡單的字母命名。文中有什么不足之處,還請大家指正。 

      posted @ 2009-06-11 21:28  Alex Leo  閱讀(7391)  評論(10)    收藏  舉報
      主站蜘蛛池模板: 国产综合久久久久鬼色| 亚洲成av人片乱码色午夜| 国产999久久高清免费观看| 国产精品视频一区不卡| 国产三级精品三级在线看| 少妇办公室好紧好爽再浪一点 | 阿克陶县| 玖玖在线精品免费视频| 久久久精品国产精品久久| 亚洲av午夜成人片| 国产精品三级中文字幕| 国产在线高清视频无码| 国产不卡一区二区精品| 色av专区无码影音先锋| 国产在线观看网址不卡一区| 国产精品天堂蜜av在线播放| 国产偷国产偷亚洲高清午夜| 美女胸18下看禁止免费视频| www国产成人免费观看视频| 中文字幕国产原创国产| japan黑人极大黑炮| 色伊人久久综合中文字幕| 综合色一色综合久久网| 中文字幕亚洲男人的天堂网络| 日韩久久久久久中文人妻| 国产精品日日摸夜夜添夜夜添无码| 尤物国精品午夜福利视频| 欧美做受视频播放| 人妻少妇久久久久久97人妻| 久久夜色精品久久噜噜亚| 久久精品高清一区二区三区| 国产粉嫩区一区二区三区| 亚洲成在人线AV品善网好看| 亚洲免费成人av一区| 日本道之久夂综合久久爱| 在线观看无码av五月花| 亚洲精品国产精品乱码不卡| 亚洲人成人无码网WWW电影首页| 777奇米四色成人影视色区| 一本色道久久—综合亚洲| 亚洲嫩模一区二区三区 |