1.運算符 (1)分類 算術運算符、關係運算符、邏輯運算符、位運算符、賦值運算符、其他運算符 >.算術運算符: >.關係運算符: using System; namespace study { public class demo0_operator { static void Main(string ...
1.運算符
(1)分類
算術運算符、關係運算符、邏輯運算符、位運算符、賦值運算符、其他運算符
>.算術運算符:
運算符 | 描述 |
---|---|
+ | 把兩個操作數相加 |
- | 從第一個操作數中減去第二個操作數 |
* | 把兩個操作數相乘 |
/ | 分子除以分母 |
% | 取模運算符,整除後的餘數 |
++ | 自增運算符,整數值增加 1 |
-- | 自減運算符,整數值減少 1 |
>.關係運算符:
運算符 | 描述 |
---|---|
== | 檢查兩個操作數的值是否相等,如果相等則條件為真。 |
!= | 檢查兩個操作數的值是否相等,如果不相等則條件為真。 |
> | 檢查左操作數的值是否大於右操作數的值,如果是則條件為真。 |
< | 檢查左操作數的值是否小於右操作數的值,如果是則條件為真。 |
>= | 檢查左操作數的值是否大於或等於右操作數的值,如果是則條件為真。 |
<= | 檢查左操作數的值是否小於或等於右操作數的值,如果是則條件為真。 |
using System; namespace study { public class demo0_operator { static void Main(string[] args) { UserControl u1 = new UserControl("1", 2, 3); UserControl u2 = new UserControl("1", 4, 5); Console.WriteLine("hashcode of u1 is=" + u1.GetHashCode()); Console.WriteLine("hashcode of u2 is=" + u2.GetHashCode()); Console.WriteLine("u1==u2 is " + (u1 == u2)); //demo string string s1 = "hello word"; string s2 = "hello word"; string s3 = "hello " + "word"; Console.WriteLine("hashcode of s1 is=" + s1.GetHashCode()); Console.WriteLine("hashcode of s2 is=" + s2.GetHashCode()); Console.WriteLine("hashcode of s3 is=" + s3.GetHashCode()); Console.WriteLine("s1==s2 is " + (s1 == s2)); Console.WriteLine("s1==s3 is " + (s1 == s3)); //運行結果如下: // hashcode of u1 is=1062342447 // hashcode of u2 is=472133479 // u1==u2 is True // hashcode of s1 is=-645689584 // hashcode of s2 is=-645689584 // hashcode of s3 is=-645689584 // s1==s2 is True } } public class UserControl { public string id; public int width; public int height; public UserControl(string id, int width, int height) { this.id = id; this.width = width; this.height = height; } public static bool operator ==(UserControl lhs, UserControl rhs) { return lhs.id == rhs.id; } public static bool operator !=(UserControl lhs, UserControl rhs) { return !(lhs == rhs); } public override bool Equals(object obj) { if (obj is UserControl) return false; return this == (UserControl)obj; } public override int GetHashCode() { return this.ToString().GetHashCode(); } public override string ToString() { return "控制項id:" + this.id + "寬度" + this.width + ";高度:" + this.height; } } }運算符重載及比較
>.邏輯運算符:
運算符 | 描述 |
---|---|
&& | 稱為邏輯與運算符。如果兩個操作數都非零,則條件為真。 |
|| | 稱為邏輯或運算符。如果兩個操作數中有任意一個非零,則條件為真。 |
! | 稱為邏輯非運算符。用來逆轉操作數的邏輯狀態。如果條件為真則邏輯非運算符將使其為假。 |
>.位運算符:
位運算符作用於位,並逐位執行操作。&、 | 和 ^ 的真值表如下所示
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
>.賦值運算符:
運算符 | 描述 |
---|---|
= | 簡單的賦值運算符,把右邊操作數的值賦給左邊操作數 |
+= | 加且賦值運算符,把右邊操作數加上左邊操作數的結果賦值給左邊操作數 |
-= | 減且賦值運算符,把左邊操作數減去右邊操作數的結果賦值給左邊操作數 |
*= | 乘且賦值運算符,把右邊操作數乘以左邊操作數的結果賦值給左邊操作數 |
/= | 除且賦值運算符,把左邊操作數除以右邊操作數的結果賦值給左邊操作數 |
%= | 求模且賦值運算符,求兩個操作數的模賦值給左邊操作數 |
<<= | 左移且賦值運算符 |
>>= | 右移且賦值運算符 |
&= | 按位與且賦值運算符 |
^= | 按位異或且賦值運算符 |
|= | 按位或且賦值運算符 |
>.其他運算符:
運算符 | 描述 |
---|---|
sizeof() | 返回數據類型的大小。 |
typeof() | 返回 class 的類型。 |
& | 返回變數的地址。 |
* | 變數的指針。 |
? : | 條件表達式 |
is | 判斷對象是否為某一類型。 |
as | 強制轉換,即使轉換失敗也不會拋出異常。 |
using System; namespace study { public class demo2_reflection { private string currentType = typeof(demo2_reflection).ToString(); private string value; public demo2_reflection(string value) { this.value = value; } public void showName() { Console.WriteLine("currentType is " + currentType); Console.WriteLine("value=" + this.value); } static void Main(string[] args) { Type t = Type.GetType("study.demo2_reflection"); Console.WriteLine("type of t is "+t.GetType().ToString()); Object[] constructParms = new object[] {"hello word"}; //構造器參數 demo2_reflection obj = (demo2_reflection)Activator.CreateInstance(t, constructParms); obj.showName(); } } }type
2.運算符優先順序
類別 | 運算符 |
---|---|
尾碼 | () [] -> . ++ - - |
一元 | + - ! ~ ++ - - (type)* & sizeof |
乘除 | * / % |
加減 | + - |
移位 | << >> |
關係 | < <= > >= |
相等 | == != |
位與 AND | & |
位異或 XOR | ^ |
位或 OR | | |
邏輯與 AND | && |
邏輯或 OR | || |
條件 | ?: |
賦值 | = += -= *= /= %=>>= <<= &= ^= |= |
逗號 | , |
2.類型轉換
C#里的類型轉換
(1)隱式轉換
從類型A到類型B的轉換可以在所有情況下進行,執行轉換的規則非常簡單,可以讓編譯器執行轉換。
隱式轉換不需要做任何工作,也不需要另外編寫代碼。如將int型數據轉換成double型數據:
int a = 10; double b = a;//隱式轉換
(2)顯式轉換
從類型A到類型B的轉換隻能在某些情況下進行,轉換規則比較複雜,應進行某種類型的額外處理。顯式轉換又叫強制類型轉換,顯式轉換需要用戶明確的指定轉換類型。如將double類型數據轉換成int類型數據:
double c = 10.5; int d = (int)c;//顯示轉換
(3)通過方法進行類型轉換
序號 | 方法 & 描述 |
---|---|
1 | ToBoolean 如果可能的話,把類型轉換為布爾型。 |
2 | ToByte 把類型轉換為位元組類型。 |
3 | ToChar 如果可能的話,把類型轉換為單個 Unicode 字元類型。 |
4 | ToDateTime 把類型(整數或字元串類型)轉換為 日期-時間 結構。 |
5 | ToDecimal 把浮點型或整數類型轉換為十進位類型。 |
6 | ToDouble 把類型轉換為雙精度浮點型。 |
7 | ToInt16 把類型轉換為 16 位整數類型。 |
8 | ToInt32 把類型轉換為 32 位整數類型。 |
9 | ToInt64 把類型轉換為 64 位整數類型。 |
10 | ToSbyte 把類型轉換為有符號位元組類型。 |
11 | ToSingle 把類型轉換為小浮點數類型。 |
12 | ToString 把類型轉換為字元串類型。 |
13 | ToType 把類型轉換為指定類型。 |
14 | ToUInt16 把類型轉換為 16 位無符號整數類型。 |
15 | ToUInt32 把類型轉換為 32 位無符號整數類型。 |
16 | ToUInt64 把類型轉換為 64 位無符號整數類型。 |
using System; namespace study { public static class typeConversion { public static string timeToString(DateTime value) { return value.ToString("yyyy-MM-dd HH:mm:ss fff"); } public static string timeToStringEx(this DateTime value) { return value.ToString("yyyy-MM-dd HH:mm:ss fff"); } static void Main(string[] args) { DateTime now=DateTime.Now; Console.WriteLine("timeToString="+typeConversion.timeToString(now)); Console.WriteLine("timeToStringEx="+now.timeToStringEx()); } } }時間類型類型轉換
using System; namespace study { public class typeConversion { static IUserControl getInstance(string controlName) { switch (controlName) { case "TextBox": return new User_TextBox(); case "Dropdown": return new User_Dropdown(); default: return new User_TextBox(); } } static void Main(string[] args) { IUserControl contorl1 = new User_TextBox(); IUserControl contorl2 = new User_Dropdown(); Console.WriteLine("type of contorl1" + contorl1.GetType().ToString()); Console.WriteLine("type of contorl2" + contorl2.GetType().ToString()); IUserControl contorl3 = (IUserControl)contorl2; Console.WriteLine("type of contorl3" + contorl3.GetType().ToString()); IUserControl contorl4 = getInstance("TextBox"); IUserControl contorl5 = getInstance("Dropdown"); Console.WriteLine("type of contorl4" + contorl4.GetType().ToString()); Console.WriteLine("type of contorl5" + contorl5.GetType().ToString()); } } public interface IUserControl { void getControl(); void checkdata(); void resetControl(); } public class User_TextBox : IUserControl { public void checkdata() { Console.WriteLine("checkdata is User_TextBox"); } public void getControl() { Console.WriteLine("getControl is User_TextBox"); } public void resetControl() { Console.WriteLine("resetControl is User_TextBox"); } } public class User_Dropdown : IUserControl { public void checkdata() { Console.WriteLine("checkdata is User_Dropdown"); } public void getControl() { Console.WriteLine("getControl is User_Dropdown"); } public void resetControl() { Console.WriteLine("resetControl is User_Dropdown"); } } }用戶控制項類