C# learning notes(1)
1. checked and unchecked:
unchecked 關鍵字用於取消整型算術運算和轉換的溢出檢查。在未檢查的上下文中,如果表達式產生目標類型范圍之外的值,則結果被截斷。默認情況下,啟用溢出檢測,這與使用 checked 具有相同的效果。
public int UncheckedAdd(int a, int b)
{
return unchecked(a + b);
}
2. Typeof:
用於獲取類型的 System.Type 對象。typeof 表達式采用以下形式:
System.Type type = typeof(int);
3. Array:
數組表示方法在C#和C語言中並不相同。
int[] myInts = { 5, 10, 15 };(C++)
int prime64Array[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61} (C#)
多維數組的表示方法為:
int[,] ArrayMaze = new int[3, 4] { {2,6,7,2},
{6,8,43,2},
{1,4,6,0}};
4. Interface, abstract, virtual的區別:
interface用來聲明接口
只提供一些方法規約,不提供方法主體,interface的方法不能用public abstract等修飾,無字段變量,無構造函數。可包含參數,實現必須實現interface中的各個方法。
abstract聲明抽象類、抽象方法
1.抽象方法所在類必須為抽象類
2.抽象類不能直接實例化,必須由其派生類實現。
3.抽象方法不包含方法主體,必須由派生類以override方式實現此方法,這點跟interface中的方法類似。
virtual標記方法為虛方法
1.可在派生類中以override覆蓋此方法
2.不覆蓋也可由對象調用
3.無此標記的方法(也無其他標記),重寫時需用new隱藏原方法
abstract與virtual: 方法重寫時都使用 override 關鍵字
interface中的方法和abstract方法都要求實現
5. C# 中的數據類型
簡單類型
數據類型
長度
取值范圍(特性)
sbyte
8
-128~127
byte
8
0~255
short
16
-32768~32767
ushort
16
0~65535
int
32
-2147483648~2147483647
uint
32
0~4294967295
long
64
-9223372036854775808~9223372036854775807
ulong
64
0~18446744073709551615
bool
true, false
float
+-1.5×10-45~3.4×1038精度7位
double
+-5.0×10-324~1.7×10308精度15到16位
decimal
128
1.0×10-28~7.9×1028 精度28到29位,使用m下標表示 ,如: decimal d_value = 1.0m;
char
16
Unicode,如字符 ‘A’,16進制’\x0032’, Unicode’\u0032’;
struct
成員可以有訪問權限,如public,可以有結構成員。
enum
元素僅限於整型。
引用類型
數據類型
特性,例子
class
包含數據成員、函數成員、嵌套類型的數據結構。數據成員有常量、域、事件,函數成員有方法、屬性、索引指示器、運算符、構造、析構函數。object類是所有類的基類。
6. 反射
Reflection,中文翻譯為反射。
這是.Net中獲取運行時類型信息的方式,.Net的應用程序由幾個部分:‘程序集(Assembly)’、‘模塊(Module)’、‘類型(class)’組成,而反射提供一種編程的方式,讓程序員可以在程序運行期獲得這幾個組成部分的相關信息,Assembly類可以獲得正在運行的裝配件信息,也可以動態的加載裝配件,以及在裝配件中查找類型信息,並創建該類型的實例。例子
System.Reflection.Assembly ass;
Type type ;
object obj;
try
{
ass = System.Reflection.Assembly.LoadFile(@"d:\TestReflect.dll");
type = ass.GetType("Webtest.ReflectTest");//必須使用名稱空間+類名稱
System.Reflection.MethodInfo method = type.GetMethod("WriteString");//方法的名稱
obj = ass.CreateInstance("Webtest.ReflectTest");//必須使用名稱空間+類名稱
string s = (string)method.Invoke(obj,new string[]
7. static class
靜態類聲明表示其所有的成員都是靜態的,不能用 new來實例化一個新的實例,不能被封裝(sealed),不能有構造函數,主要用在不通過實例訪問成員的情況。http://msdn2.microsoft.com/en-us/library/79b3xss3(VS.80).ASPx
8. internal class, protected, public, private
沒有嵌套在其他類或結構中的類和結構可以是公共的,也可以是內部的。聲明為公共的類型可由任何其他類型訪問。聲明為內部的類型只能由同一程序集中的類型訪問。類和結構默認聲明為內部的,除非向類定義添加了關鍵字 public,通過組合 protected 和 internal 關鍵字,可以將類成員標記為受保護的內部成員 -- 只有派生類型或同一程序集中的類型才能訪問該成員。最後,可以使用 private 關鍵字將類成員或結構成員聲明為私有的,指示只有聲明該成員的類或結構才能訪問該成員。
訪問權限關鍵字
含義
public
Access is not restricted.
protected
Access is limited to the containing class or types derived from the containing class.
internal
Access is limited to the current assembly.
protected internal
Access is limited to the current assembly or types derived from the containing class.
private
Access is limited to the containing type.
sealed class
封閉類是防止被其他類繼承而設置的類修飾符,如果試圖將一個封閉類作為其他類的基類,將會有報錯信息。封閉類不能是抽象類。Sealed修飾符不能用來修飾函數,但是可以在派生類的重寫函數上使用sealed來防止它不被繼續重寫。如
class MyClass : MyClass1
{
public override sealed void Method()
{
Console.WriteLine("sealed method");
}
}