C#面向对象(一):明确几个简单的概念作为开胃菜
絕對干貨,總結了下C#面向對象的干貨內容以及我幾年來的使用心得,分享出來
先明確幾個簡單概念作為開胃菜:
1、命名空間
namespace?BackStageManagement.Services
關鍵字用于聲明包含一組相關對象的作用域。 可以使用命名空間來組織代碼元素并創建全局唯一類型。命名空間下可以有很多類!
定義命名空間: namespace 空間名稱{ 類 }
引入命名空間: using 空間名稱
?
?
2、構造函數
構造函數分類
2.1.什么是構造方法?
首先它是一個方法,然后它具有“構造”的作用,所有稱之為構造方法。
簡單點說,構造方法可以對實例化出來的對象進行初始化。
方便實例化化之后的初始化操作。
2.2 構造方法的語法要求
public 類名()
{
構造函數代碼;
}
①構造方法要用 public 修飾,不能用 private 修飾;
②構造方法沒有返回值, 且連 void 也不能寫!!;
③構造方法的方法名字必須跟類名一樣;
④構造方法是可以有重載的。
構造方法什么時候被調用?
當我們使用 new 關鍵字實例化一個對象的時候, 會首先執行構造方法。
public Person(string name, int age, Gender gender, string address){this.name = name;this.age = age;this.gender = gender;this.address = address;}2.3?this 關鍵字
this 代表當前類的對象。
2.4.注意事項
當我們的類中不寫構造方法的時候,在代碼編譯后,系統會自動給它添加一個空
構造方法,如果我們寫了一個構造方法,默認的“ 空構造方法”就不會存在。
?
這是因為我們手動謝了一個傳參的構造方法,所以空的構造方法沒有默認添加。
所以使用構造方法的話,如果希望可以默認初始化,需要自己加一個
????????public?Person()
????????{
????????}
2.5.C#靜態構造函數
靜態構造函數是C#的一個新特性,其實好像很少用到。不過當我們想初始化一些靜態變量的時候就需要用到它了。這個構造函數是屬于類的,而不是屬于哪里實例的,就是說這個構造函數只會被執行一次。也就是在創建第一個實例或引用任何靜態成員之前,由.NET自動調用。
class SimpleClass {// Static constructorstatic SimpleClass(){// } }在使用靜態構造函數的時候應該注意幾點:
1、靜態構造函數既沒有訪問修飾符,也沒有參數。因為是.NET調用的,所以像public和private等修飾符就沒有意義了。
2、是在創建第一個類實例或任何靜態成員被引用時,.NET將自動調用靜態構造函數來初始化類,也就是說我們無法直接調用靜態構造函數,也就無法控制什么時候執行靜態構造函數了。
3、一個類只能有一個靜態構造函數。
4、無參數的構造函數可以與靜態構造函數共存。盡管參數列表相同,但一個屬于類,一個屬于實例,所以不會沖突。
5、最多只運行一次。
6、靜態構造函數不可以被繼承。
7、如果沒有寫靜態構造函數,而類中包含帶有初始值設定的靜態成員,那么編譯器會自動生成默認的靜態構造函數。
3、屬性的get和set
get: 當通過屬性名取值的時候, 會自動調用 get 中的代碼;
set: 當通過屬性名給字段賦值的時候, 會自動調用 set 中的代碼;
value: 也是系統關鍵字, 代表賦給屬性的值;
get 和 set 本質上就是兩個函數。
private int age;public int Age{get { return age; } //get:取值.set {if(value > 100 || value < 0){age = 18;}else{age = value;}} //set:賦值.}4、靜態方法與非靜態方法
a、靜態方法的調用
類.靜態方法名([參數列表])
非靜態方法的調用
類 對象?= new 類的構造函數([參數列表])
對象.非靜態方法名([參數列表])
靜態方法是屬于類的,而非靜態方法是屬于對象的;
?
Class1 test = new Class1(); test.HelloFJT();//調用非靜態類的非靜態方法 Class1.HelloJT();//調用非靜態類的靜態方法?
b、內存的初始化
靜態成員是在第一次使用時進行初始化。非靜態的成員是在創建對象的時候。
靜態構造函數只能被執行一次;非靜態的構造函數可以根據需要進行多次使用。
c、內存中存儲
靜態的只有一塊全局內存空間,非靜態的可以有多塊內存空間(副本)
d、釋放
靜態的一旦創建則在全局區一直存放,直到應用程序結束。非靜態的則是由new關鍵字在堆中創建的。可以有多個副本。由GC進行釋放。
4.2、都有哪些靜態的東西
方法、字段、屬性、事件、構造函數、類
不能使用靜態關鍵字的
常量、索引器、析構函數
4.3、靜態構造函數
非靜態類中可以包含靜態成員。但是,靜態類中不能包含任何非靜態成員。靜態構造函數不能帶有任何參數,而非靜態構造函數可以有多種參數列表
4.4、使用場合
a、需要保存全局都有效的數據, 如:當前已登錄用戶信息、系統配置信息、系統設置
b、因為效率相對更高,所以需要快速訪問的
c、使用頻率非常高的
注意:不要過多的濫用Static
?
面向對象開發有三大特性(特點 / 特征) : 封裝, 繼承, 多態。我們會在下個篇章里真正的去討論這幾個特征。
?
轉載于:https://www.cnblogs.com/qixinbo/p/8214049.html
總結
以上是生活随笔為你收集整理的C#面向对象(一):明确几个简单的概念作为开胃菜的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: obstacle
- 下一篇: BZOJ - 3578: GTY的人类基