C#基礎知識點(共21頁)_第1頁
C#基礎知識點(共21頁)_第2頁
C#基礎知識點(共21頁)_第3頁
C#基礎知識點(共21頁)_第4頁
C#基礎知識點(共21頁)_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上 C# 基礎知識點1、 數據類型1.1、 值類型、引用類型1.2、 預定義類型1.3、 類型轉換1.4、 裝箱和拆箱2、 變量、常量2.1、變量2.2、常量3、 運算符和表達式3.1、運算符、表達式3.2、特殊運算符3.3、優先級別4、 流程控制4.1、條件語句4.2、循環語句4.3、跳轉語句4.4、異常處理5、 程序結構5.1、類5.2、命名空間5.3、Main方法6、程序例子7、作業一 數據類型1.1 值類型、引用類型C# 的數據類型可以分成兩大部分:值類型和引用類型。值類型的變量總是直接包含著自身的數據,而引用類型的變量是指向實際數據的地址。C# 值類型包括:整

2、型、布爾型、實型、十進制型、結構和枚舉、接口和數組。從概念上看,其區別是值類型直接存儲其值,而引用類型存儲對值的引用。這兩種類型存儲在內存的不同地方:值類型存儲在堆棧中,而引用類型存儲在托管堆上。注意區分某個類型是值類型還是引用類型,因為這種存儲位置的不同會有不同的影響。例如,int是值類型,這表示下面的語句會在內存的兩個地方存儲值20: / i 和j都是整型變量i = 20;j = i;但考慮下面的代碼。這段代碼假定已經定義了一個類class1,class1是一個引用類型,它有一個int類型的成員變量Value: class1 x, y x = new class1 ();x.Value =

3、 30; y = x;Console.WriteLine(y.Value);/輸出30y.Value = 50;Console.WriteLine(x.Value);/輸出50要理解的重要一點是在執行這段代碼后,只有一個class1對象。x和y都指向包含該對象的內存位置。因為x和y是引用類型的變量,聲明這兩個變量只是保留了一個引用而不會實例化給定類型的對象。因為x和y引用同一個對象,所以對x的修改會影響y,反之亦然。因此上面的代碼會顯式30和50。 如果變量是一個引用,就可以把其值設置為null,確定它不引用任何對象: y = null;在C#中,基本數據類型如bool和long都是值類型。如

4、果聲明一個bool變量,并給它賦予另一個bool變量的值,在內存中就會有兩個bool值。如果以后修改第一個bool變量的值,第二個bool變量的值也不會改變。這些類型是通過值來復制的。相反,大多數更復雜的C#數據類型,包括我們自己聲明的類都是引用類型。它們分配在堆中,其生存期可以跨多個函數調用,可以通過一個或幾個別名來訪問。CLR(Common Language Runtime公共語言運行庫指.NET的運行時支持,包括一個面向對象類型系統和一些運行時服務)執行一種精細的算法來跟蹤哪些引用變量仍是可以訪問的,哪些引用變量已經不能訪問了。CLR會定期進行清理,刪除不能訪問的對象,把它們占用的內存返

5、回給操作系統。這是通過垃圾收集器實現的。1.2 預定義類型C#認可的基本預定義類型并沒有內置于語言中,而是內置于.NET Framework中。例如,在C#中聲明一個int類型的數據時,聲明的實際上是.NET結構System.Int32的一個實例。C#支持兩個預定義的引用類型,如下表:CTS:公共類型系統名 稱CTS 類說 明ObjectSystem.Object根類型,其他類型都是從它派生而來的(包括值類型) StringSystem.StringUnicode字符串1. object類型在C#中,object類型就是最終的父類型,所有內在和用戶定義的類型都從它派生而來。這是C#的一個重要特

6、性, object類型就可以用于兩個目的: 可以使用object引用綁定任何特定子類型的對象。 object類型執行許多基本的一般用途的方法,包括Equals()、GetHashCode()、GetType()和ToString()。用戶定義的類可能需要使用一種面向對象技術 重寫,提供其中一些方法的替代執行方法。例如,重寫ToString()時,要給類提供一個方法,該方法可以提供類本身的字符串表示。如果類中沒有提供這些方法的實現,編譯器就會在對象中選擇這些實現,它們在類中的執行不一定正確。2. string類型C#有string關鍵字,在翻譯為.NET類時,它就是System.string。有

7、了它,像字符串連接和字符串復制這樣的操作就很簡單了: string str1 = "Hello "string str2 = "World"string str3 = str1 + str2; / 字符串連接盡管這是一個值類型的賦值,但string是一個引用類型。String對象保留在堆上,而不是堆棧上。因此,當把一個字符串變量賦給另一個字符串時,會得到對內存中同一個字符串的兩個引用。但是,string與引用類型在常見的操作上有一些區別。例如,修改其中一個字符串,注意這會創建一個全新的string對象,而另一個字符串沒有改變。考慮下面的代碼: using

8、 System;class StringExample public static int Main() string s1 = "a string" string s2 = s1; Console.WriteLine("s1 is " + s1); Console.WriteLine("s2 is " + s2); s1 = "another string" Console.WriteLine("s1 is now " + s1); Console.WriteLine("s2 is

9、now " + s2); return 0; 其輸出結果為:s1 is a strings2 is a strings1 is now another strings2 is now a string換言之,改變s1的值對s2沒有影響,這與我們期待的引用類型正好相反。1.3類型轉換1.隱式轉換隱式轉換就是系統默認的、不需要加以聲明就可以進行的轉換。 隱式轉換一般不會失敗,轉換過程中也不會導致信息丟失。隱式轉換包括下面幾種:2.顯式轉換顯式類型轉換,就是強制類型轉換。與隱式轉換正好相反,顯式轉換需要用戶明確指定轉換的類型,不如看下面例子: long l = 5000; int I =

10、(int)l;顯式轉換可以發生在表達式的計算過程中。它并不是總能成功,而且常常可能引起信息丟失。顯式轉換包括所有的隱式轉換。顯式轉換包括下面幾種:1.4 裝箱和拆箱裝箱和拆箱使我們可以把一個值類型當作一個引用類型看待。裝箱轉換是指將一個值類型隱式的轉換成一個Object類型,拆箱轉換是指將一個Object類型顯式地轉換成一個值類型,他們互為逆過程。裝箱(boxing)裝箱轉換是指將一個值類型隱式轉換成一個object類型,或者把這個值類型轉換成一個被該值類型應用的接口類型。把一個值類型的值裝箱,也就是創建一個object實例并將這個值給這個objet.不如: Int i = 10; Objec

11、t obj = i;拆箱(unboxing)拆箱轉換是指將一個對象類型顯式轉換成一個值類型,或是將一個接口類型顯示地轉換成一個執行該接口的值類型。拆箱的過程分為兩步:首先,檢查這個對象的實例,看它是否為給定的值類型的裝箱值。然后,把這個實例的值拷貝給值類型的變量。如: Int i = 10; Object obj = i; Int j = (int)obj;二 變量、常量2.1、變量在C#中聲明變量使用下述語法:datatype identifier;例如: int i; 一旦它被聲明之后,就可以使用賦值運算符(=)給它分配一個值: i = 10;還可以在一行代碼中聲明變量,并初始化它的值:

12、int i = 10; 如果在一個語句中聲明和初始化了多個變量,那么所有的變量都具有相同的數據類型: int x = 10, y =20;要聲明類型不同的變量,需要使用單獨的語句。在多個變量的聲明中,不能指定不同的數據類型: int x = 10;bool y = true; int x = 10, bool y = true; / 這樣編譯報錯1.變量的初始化變量的初始化是C#強調安全性的另一個例子。簡單地說,C#編譯器需要用某個初始值對變量進行初始化,之后才能在操作中引用該變量。大多數現代編譯器把沒有初始化標記為警告,但C#編譯器把它當作錯誤來看待。這就可以防止我們無意中從其他程序遺留下來

13、的內存中獲取垃圾值。C#有兩個方法可確保變量在使用前進行了初始化: 變量是類或結構中的字段,如果沒有顯式進行初始化,在默認狀態下當創建這些變量時,其值就是0。 方法的局部變量必須在代碼中顯式初始化,之后才能在語句中使用它們的值。此時,初始化不是在聲明該變量時進行的,但編譯器會通過方法檢查所有可能的路徑,如果檢測到局部變量在初始化之前就使用了它的值,就會產生錯誤。同樣的規則也適用于引用類型。考慮下面的語句: Something objSomething;在C#中,這行代碼僅會為Something對象創建一個引用,但這個引用還沒有指向任何對象。對該變量調用方法或屬性會導致錯誤。在C#中實例化一個引

14、用對象需要使用new關鍵字。如上所述,創建一個引用,使用new關鍵字把該引用指向存儲在堆上的一個對象: objSomething = new Something(); / This creates a Something on the heap2.變量的作用域變量的作用域是可以訪問該變量的代碼區域。一般情況下,確定作用域有以下規則: 只要字段所屬的類在某個作用域內,其字段(也稱為成員變量)也在該作用域內局部變量存在于表示聲明該變量的塊語句或方法結束的封閉花括號之前的作用域內。 在for、while或類似語句中聲明的局部變量存在于該循環體內。 局部變量的作用域沖突大型程序在不同部分為不同的變量使

15、用相同的變量名是很常見的。只要變量的作用域是程序的不同部分,就不會有問題,也不會產生模糊性。但要注意,同名的局部變量不能在同一作用域內聲明兩次,所以不能使用下面的代碼: int x = 20;/ 其它代碼int x = 30;字段和局部變量的作用域沖突在某些環境下,可以區分名稱相同(盡管不是經過完全限定的名稱)、作用域相同的兩個標識符。此時編譯器允許聲明第二個變量。原因是C#使得變量之間有一個基本的區分,它把聲明為類型級的變量看作是字段,而把在方法中聲明的變量看作局部變量。2.2、常量在聲明和初始化變量時,在變量的前面加上關鍵字const,就可以把該變量指定為一個常量。顧名思義,常量是其值在使

16、用過程中不會發生變化的變量: const int a = 100; /變量的值不能改變C#中只能把局部變量和字段聲明為常量。常量具有如下特征: 常量必須在聲明時初始化。指定了其值后,就不能再修改了。 常量的值必須能在編譯時用于計算。因此,不能用從一個變量中提取的值來初始化常量。如果需要這么做,應使用只讀字段。 常量用易于理解的清楚的名稱替代了“含義不明確的數字或字符串”,使程序更易于閱讀。 常量使程序更易于修改。例如,在C#程序中有一個SalesTax常量,該常量的值為6%。如果以后銷售稅率發生變化,可以把新值賦給這個常量,就可以修改所有的稅款計算,而不必查找整個程序,修改稅率為0.06的每個

17、項。 常量更容易避免程序出現錯誤。如果要把另一個值賦給程序中的一個常量,而該常量已經有了一個值,編譯器就會報告錯誤。三 運算符和表達式3.1、運算符、表達式算術操作符和算術表達式 加法操作符 減法操作符 * 乘法操作符 / 除法操作符 求余法操作符例:加法表達式 Enum WeekdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;Weekday day1 = weekday.Sunday;Weekday day2 = day1+2;Console.WriteLine(day2);結果是: Tuesday 賦值運算符 * /

18、& << >> 是最簡單的賦值運算符,其它的是復合賦值 ,X 5 等價于X X5; 關系運算符 等于 !不等于 < 小于 > 大于 <= 小于等于 >= 大于等于 Is運算符 Is元算符被用于動態的檢查運行時對象類型是否和給定的類型兼容。運算“ e is T”的結果,其中,e 是一個表達式,T是一個類型,返回值是一個布爾值。它表示,e是否能通過引用轉換,裝箱轉換,成功的轉換于 T類型。 如:1 is int 結果是: true As 操作符 As 操作符通過引用轉換或裝箱轉換將一個值顯式地轉換成指定的引用類型。不像顯式類型轉換,as 不會

19、產生任何異常。如果轉換不可以進行,那么結果值為null 。形如“e as T”的運算,e 是一個表達式,T是一個引用類型。返回值的類型總是T的類型,并且結果總是一個值。如: ? as string;雖然,字符型不能轉換為字符串類型,程序可以通過,不過有一個警告。 位運算 & 與| 或 異或 取補<< 左移>> 右移3.2、特殊運算符 三元操作符 ?: 條件表達式 b ? x : y ,先計算條件b ,然后進行判斷。 如果 b 的值為true,計算 x 的值,運算結果為 x 的值;否則,計算y,運算結果為 y 值。一個表達式,從不會即計算 x 值,又計算y 值。條

20、件表達式是向右關聯,例如: a ? b : c ? d: e 將按 a ? b: (c ? d : e)的形式執行。 自增和自減操作符 就是對變量自身加一或者減一,注意,自增和自減運算符必須是對一個變量, 一個屬性訪問器,一個索引訪問器,而不能是常量或其表達式, 如:5,(x+y)+ 都是非法的。 自增和自減操作符有前綴和后綴之分,前綴遵循“先增減,后使用”,后綴遵循“先使用后增減”。 New 操作符 一般用于創建一個新的類型實例, 如: class A A a = new A();改運算符還有其它更多的用法,具體如下:在 C# 中,new 關鍵字可用作運算符、修飾符或約束。1)new 運算符

21、:用于創建對象和調用構造函數。這種大家都比較熟悉,沒什么好說的了。2)new 修飾符:在用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。3)new 約束:用于在泛型聲明中約束可能用作類型參數的參數的類型。  關于第二種用法看下例:using System;namespace ConsoleApplication1    public class BaseA            public int x = 1;   

22、;     public void Invoke()                    Console.WriteLine(x.ToString();                public int TrueValue &

23、#160;                  get return x;             set x = value;                 public class Derived

24、B : BaseA            new public int x = 2;        new public void Invoke()                    Console.WriteLine(x.ToString();

25、                new public int TrueValue                    get return x;            

26、 set x = value;                  class Test            static void Main(string args)                 

27、;   DerivedB b = new DerivedB();            b.Invoke();/調用DerivedB的Invoke方法,輸出:2            Console.WriteLine(b.x.ToString();/輸出DerivedB的成員x值:2      &

28、#160;     BaseA a = b;            a.Invoke();/調用BaseA的Invoke方法,輸出:1            a.TrueValue = 3;/調用BaseA的屬性TrueValue,修改BaseA的成員x的值       

29、;     Console.WriteLine(a.x.ToString();/輸出BaseA的成員x的值:3            Console.WriteLine(b.TrueValue.ToString();/輸出DerivedB的成員x的值,仍然是:1/可見,要想訪問被隱藏的基類的成員變量、屬性或方法,辦法就是將子類造型為父類,然/后通過基類訪問被隱藏的成員變量、屬性或方法。     &

30、#160;        new約束指定泛型類聲明中的任何類型參數都必須具有公共的無參數構造函數.請看下例:using System;using System.Collections.Generic; namespace ConsoleApplication2    public class Employee            private string name;  &

31、#160;     private int id;         public Employee()                    name = "Temp"         &#

32、160;  id = 0;                 public Employee(string s, int i)                    name = s;      

33、60;     id = i;                 public string Name                    get return name;     

34、0;       set name = value;                  public int ID                    get return id;   &

35、#160;         set id = value;                  class ItemFactory<T> where T : new()            public T GetNewItem()   

36、                 return new T();                 public class Test            public static void Main()&#

37、160;                   ItemFactory<Employee> EmployeeFactory = new ItemFactory<Employee>();            /此處編譯器會檢查Employee是否具有公有的無參構造函數。  &#

38、160;         /若沒有則會有The Employee must have a public parameterless constructor 錯誤。            Console.WriteLine("0'ID is 1.", EmployeeFactory.GetNewItem().Name, EmployeeFactory.GetNewItem().ID

39、);            Typeof 操作符 用于獲得系統原形對象的類型。 如: typeof(int) 等于 int32. Checked 和 unchecked 操作符 Checked 和 unchecked 操作符用于整形算術運算時控制當前環境中的溢出檢查。 Const int x = ; Const int y = ; Return checked(x * y) /編譯時會報溢出錯誤 3.3、優先級別 當一個表達式包含多個操作符時,操作符的優先級控制著單個操作符的求值順序。四 流程控

40、制4.1、條件語句 條件語句可以根據條件是否滿足或根據表達式的值控制代碼的執行分支。C#有兩個分支代碼的結構:if語句,測試特定條件是否滿足;switch語句,它比較表達式和許多不同的值。1. if語句語法都是非常直觀的:if (condition) statement(s)else statement(s)還可以單獨使用if語句,不加else語句。也可以合并else if子句,測試多個條件。2. switch語句switch.case語句適合于從一組互斥的分支中選擇一個執行分支。其形式是switch參數的后面跟一組case子句。如果switch參數中表達式的值等于某個case子句旁邊的某個值

41、,就執行該case子句中的代碼。此時不需要使用花括號把語句組合到塊中;只需使用break語句標記每個case代碼的結尾即可。也可以在switch語句中包含一個default子句,如果表達式不等于其他case子句的值,就執行default子句的代碼。下面的switch語句測試integerA變量的值: switch (integerA) case 1: Console.WriteLine("integerA =1"); break; case 2: Console.WriteLine("integerA =2"); break; case 3: Conso

42、le.WriteLine("integerA =3"); break; default: Console.WriteLine("integerA is not 1,2, or 3"); break;注意case的值必須是常量表達式不允許使用變量。4.2、循環語句C#提供了4種不同的循環機制(for、while、do.while和foreach),在滿足某個條件之前,可以重復執行代碼塊。1. for循環C#的for循環提供的迭代循環機制是在執行下一次迭代前,測試是否滿足某個條件,其語法如下:for (initializer; condition; iter

43、ator) statement(s)其中: initializer是指在執行第一次迭代前要計算的表達式(通常初始化為一個局部變量,作為循環計數器); condition是在每次迭代循環前要測試的表達式(它必須等于true,才能執行下一次迭代); iterator是每次迭代完要計算的表達式(通常是遞增循環計數器)。當condition等于false時,迭代停止。for循環是所謂的預測試循環,因為循環條件是在執行循環語句前計算的,如果循環條件為假,循環語句就根本不會執行。for循環非常適合用于一個語句或語句塊重復執行預定的次數。下面的例子就是使用for循環的典型用法,這段代碼輸出從099的整數:

44、for (int i = 0; i < 100; i = i+1) Console.WriteLine(i); 2. while循環while循環與for循環一樣,while也是一個預測試的循環。其語法是類似的,但while循環只有一個表達式:while(condition) statement(s);與for循環不同的是,while循環最常用于下述情況:在循環開始前,不知道重復執行一個語句或語句塊的次數。通常,在某次迭代中,while循環體中的語句把布爾標記設置為false,結束循環,如下面的例子所示。 int i = 10,sum = 0;while (i > 0) i -;

45、sum += i;3. dowhile循環do.while循環是while循環的后測試版本。do.while循環適合于至少執行一次循環體的情況: int i = 10, sum = 0; do i-; sum += i; while (i > 0);4. for each循環foreach循環是我們討論的最后一種C#循環機制。也是非常受歡迎的一種循環。從下面的代碼中可以了解foreach循環的語法,其中假定arrayOfInts是一個整型數組: int numbers = 4, 5, 6, 1, 2, 3, -2, -1, 0 ; foreach (int i in numbers) S

46、ystem.Console.WriteLine(i); 其中,foreach循環一次迭代數組中的一個元素。對于每個元素,它把該元素的值放在int型的變量temp中,然后再執行一次循環迭代。如果需要迭代集合中的各項,并改變它們的值,就應使用for循環。4.3、跳轉語句C#提供了許多可以立即跳轉到程序中另一行代碼的語句,在此,先介紹goto語句。1. goto語句goto語句可以直接跳轉到程序中用標簽指定的另一行(標簽是一個標識符,后跟一個冒號): goto Label1; Console.WriteLine("This won't be executed");Labe

47、l1: Console.WriteLine("Continuing execution from here");goto語句有兩個限制。不能跳轉到像for循環這樣的代碼塊中,也不能跳出類的范圍,不能退出try.catch塊后面的finally塊。goto語句的名聲不太好,在大多數情況下不允許使用它。一般情況下,使用它肯定不是面向對象編程的好方式。 前面簡要提到過break語句在switch語句中使用它退出某個case語句。實際上,break也可以用于退出for、foreach、while或do.while循環,循環結束后,立即執行后面的語句。如果該語句放在嵌套的循環中,就執

48、行最內部循環后面的語句。如果break放在switch語句或循環外部,就會產生編譯時錯誤。2. continue語句continue語句類似于break,也必須用于for、foreach、while或 do.while循環中。但它只從循環的當前迭代中退出,然后從循環的下一次迭代開始重新執行,而不是退出循環。3. return語句return語句用于退出類的方法,把控制返回方法的調用者,如果方法有返回類型,return語句必須返回這個類型的值,如果方法沒有返回類型,應使用沒有表達式的return語句。4.4、異常處理Try catch(s)Try finallyTry catch(s) fina

49、lly五 程序結構5.1、類C中的類是對數據結構的封裝,是C最重要的組成部分。我們利用類定義各種新的數據類型,其中既包含數據內容,有包含數據操作,封裝之后,類可以控制外界對它成員的訪問。類的靜態成員屬于類,非靜態成員屬于這個類的某個實例。在一個類的實例對象的生命周期中,最先執行的代碼是類的構造函數,構造函數總是用來初始化對象的特殊類型的函數。不帶參數的類的構造函數對類的實例的初始化始固定的,我們也可以使用帶參數的構造函數,通過向他傳遞參數來對類的不同實例進行不同的初始化。構造函數同樣也可以使用默認參數。當這個類的實例超出了作用域的時候,或者由于其它理由被破壞時,析構函數將釋放分配給該實例的任何

50、存儲區。5.2、命名空間 命名空間提供了一種組織相關類和其它類型的方式。與文件或組件不同,命名空間時一種邏輯組合,而不是物理組合,在C文件中定義類時,可以把它包含在命名空間的定義中,以后在定義另一個類,在另一個文件中執行相關操作時,就可以在同一個命名空間中包含它,創建一個邏輯組合,告訴其它使用類的開發人員如何使類相關,和對他們進行使用。 命名空間可以嵌套。如:Namespace ANamespace B Namespace C 代碼塊 每個命名空間名都由他所在的命名空間的名稱組成,這些名稱用句號隔開,首先是最外層,最后是自己的名字。如:上面的例子也可以寫成:Namespace A. B. C

51、代碼塊不允許在另一個嵌套的命名空間中聲明多部分的命名空間。也不能在同一命名空間中有兩個同名的類。5.3、Main方法C#程序是從方法Main()開始執行的。這個方法必須是類或結構的靜態方法,并且其返回類型必須是int或void。雖然顯式指定public修飾符是很常見的,因為按照定義,必須在程序外部調用該方法,但我們給該方法指定什么訪問級別并不重要,即使把該方法標記為private,它也可以運行。在調用程序時,可以讓CLR包含一個參數,將命令行參數轉送給程序。這個參數是一個字符串數組,傳統稱為args(但C#可以接受任何名稱)。在啟動程序時,可以使用這個數組,訪問通過命令行傳送過來的選項。下面的

52、例子ArgsExample.cs是在傳送給Main方法的字符串數組中迭代,并把每個選項的值寫入控制臺窗口:using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication2 class Program static void Main(string args) for (int i = 0; i < args.Length; i+) Console.WriteLine(argsi); 通常使用命令行就可以編譯這段代碼。在運行編譯好的可執行文件時,可以在程序名的后面加上參

53、數,例如:在dos命令行中輸入 :存儲目錄/ConsoleApplication2/a /b /c 輸出:/a/b/c六 程序例子6.1、類的定義,繼承,使用,類方法的重寫using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1 class Vehicle public int wheels; public float weight; public void F() wheels = 4; weight = 10; class Car : Vehicle int passengers; public void F() weight = 8; wheels = 8; Vehicle v = new Vehicle(); v.wheels = 4; v.weight = 6; passengers = 10; Console.WriteLine("01234", v.wheels,v.weight,wheels,weight,passengers); public override string ToString() string Result = "繼承來的weight:" +

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論