从一般到特殊-C#中的对象
文章目錄
- 對象的概念
- 對象的創(chuàng)建和使用
- 匿名類型和初始化器
- 構(gòu)造函數(shù)和析構(gòu)函數(shù)
- 構(gòu)造函數(shù)
- 析構(gòu)函數(shù)
- 范例
- 參數(shù)傳遞
|
對象的概念
類是具有相同特征一類事物的抽象,而對象是類的實例。
類和對象有本質(zhì)的區(qū)別,類是從對象中抽取出來的一類對象的描述,對象是類中的個體,是一個具體的事物,創(chuàng)建對象就是從抽象到具體的過程,是將類的屬性和行為實例化的過程。類與對象的關(guān)系可以比喻為設(shè)計手機和具體手機的關(guān)系,類就像手機機型設(shè)計一樣說明了手機所應該具備的所有屬性和功能,但是手機設(shè)計并不是手機;對象就是跟據(jù)手機設(shè)計而制造出來的手機,它具有手機的所有功能,能打電話發(fā)短信。
對象的創(chuàng)建和使用
類是抽象的,要使用類中非靜態(tài)的成員,就必須創(chuàng)建類的對象,創(chuàng)建對象就是類的實例化過程。
C#使用new運算符創(chuàng)建對象。
- 語法格式如下:
- 類名 對象名 = new 類名(參數(shù)列表);
其中,參數(shù)列表是可選的。
class PhoneClass{public string brand;public string type;}class Program{static void Main(string[] args){PhoneClass Phone = new PhoneClass();//創(chuàng)建Phone類的一個對象Phone.brand = "huawei";Phone.type = "5G";Console.WriteLine("手機品牌是:" + Phone.brand);Console.WriteLine("手機種類是:" + Phone.type);Console.ReadKey();}}
如創(chuàng)建Phone類的一個對象如下:對象的使用是通過訪問對象中的非靜態(tài)成員來實現(xiàn)的。
- 訪問對象中的非靜態(tài)成員語法如下:
- 對象名.成員名
如Phone類的一個對象的使用如下:
class PhoneClass{public string brand;public string type;}class Program{static void Main(string[] args){PhoneClass Phone = new PhoneClass();//創(chuàng)建Phone類的一個對象Phone.brand = "huawei";Phone.type = "5G";Console.WriteLine("手機品牌是:" + Phone.brand);//Phone對象的使用Console.WriteLine("手機種類是:" + Phone.type);//Phone對象的使用Console.ReadKey();}}匿名類型和初始化器
匿名類型是C#3.0新增功能,能簡化對象的初始值設(shè)置。使用對象初始化,創(chuàng)建類的對象并對其屬性成員賦值。
PhoneClass Phone = new PhoneClass(){Phone.brand = "huawei"};
舉例如下:例如定義類Point,有兩個屬性X,Y表示點的坐標
public class Point //定義Point類{ // 類的屬性定義中set,get可以簡寫為以下形式 public double X { get; set; }//定義屬性X,點的橫坐標public double Y { get; set; }//定義屬性Y,點的縱坐標}使用對象初始化,可以這樣創(chuàng)建對象并對屬性賦值
Point P = new Point() { X = 0.0, Y = 0.0 }; //創(chuàng)建對象P并對XY賦值使用匿名類型可以定義內(nèi)嵌的類型,不需要顯示的定義一個類型。假設(shè)沒有定義Point類,卻要使用一個Point的對象,可以使用對象初始化器,不用指定類名。
var p = new { X = 0.0, Y = 0.0 }; //創(chuàng)建匿名類型p,并使用對象初始化器賦值。
例如:構(gòu)造函數(shù)和析構(gòu)函數(shù)
對象和客觀世界的事物一樣,從創(chuàng)建到消亡都有一個生命周期,對象的創(chuàng)建和銷毀是通過類的構(gòu)造函數(shù)和析構(gòu)函數(shù)來完成的。
構(gòu)造函數(shù)
構(gòu)造函數(shù)是類的特殊方法成員,其名稱和類名相同,主要用來完成對象的初始化。
C#通過new創(chuàng)建對象的過程實際上就是調(diào)用類的構(gòu)造函數(shù)的過程,創(chuàng)建對象時調(diào)用構(gòu)造函數(shù)對對象進行初始化。每個類都有構(gòu)造函數(shù),如果沒有定義,系統(tǒng)也會提供一個默認的構(gòu)造函數(shù),默認的構(gòu)造函數(shù)一般不進行什么操作。在訪問一個類的時候,系統(tǒng)最先執(zhí)行構(gòu)造函數(shù)中的語句。析構(gòu)函數(shù)
析構(gòu)函數(shù)是對象銷毀前釋放所占用的系統(tǒng)資源的類的成員。析構(gòu)函數(shù)的名字是在類名前加一個“~”符號。析構(gòu)函數(shù)不接受任何參數(shù),也不返回任何值。
public class Point //定義Point類{ // 類的屬性定義中set,get可以簡寫為以下形式 Point(){//構(gòu)造函數(shù) //構(gòu)造函數(shù)內(nèi)容}~Point() //析構(gòu)函數(shù)名{//析構(gòu)函數(shù) //析構(gòu)函數(shù)內(nèi)容}public double X { get; set; }//定義屬性X,點的橫坐標public double Y { get; set; }//定義屬性Y,點的縱坐標}
例如:范例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace test {class Program{static void Main(string[] args){Point p1 = new Point();Console.WriteLine("無參數(shù)構(gòu)造函數(shù)演示");Console.WriteLine("X:" + p1.X);Console.WriteLine("Y:" + p1.Y);Point p2 = new Point(2.0,3.0);Console.WriteLine("有參數(shù)構(gòu)造函數(shù)演示");Console.WriteLine("X:" + p2.X);Console.WriteLine("Y:" + p2.Y);Console.ReadKey();}}public class Point //定義Point類{ // 類的屬性定義中set,get可以簡寫為以下形式 public Point(){X = 0.0; Y = 2.0;//構(gòu)造函數(shù) //構(gòu)造函數(shù)內(nèi)容}public Point(double x,double y){X = x; Y = y;//構(gòu)造函數(shù) //構(gòu)造函數(shù)內(nèi)容}~Point() //析構(gòu)函數(shù)名{Console.WriteLine("清理資源");//析構(gòu)函數(shù) //析構(gòu)函數(shù)內(nèi)容}public double X { get; set; }//定義屬性X,點的橫坐標public double Y { get; set; }//定義屬性Y,點的縱坐標} }運行結(jié)果:
參數(shù)傳遞
C#的許多方法成員是有參數(shù)的,定義方法時聲明的參數(shù)是形式參數(shù),調(diào)用方法時要給形式參數(shù)傳值,傳遞方法的值是實參。C#有“值傳遞”和“引用傳遞”兩種傳遞參數(shù)類型。值傳遞是C#默認的傳遞方式,使用值傳遞方式時,向形式參數(shù)傳遞實在參數(shù)的副本,方法內(nèi)發(fā)生的對形式參數(shù)的更改對實在參數(shù)本身沒有影響,就像文件的復印件一樣,無論如何修改復印件,原件沒有任何改變。如果希望所調(diào)用的方法能更改實在參數(shù)的值,則必須使用ref或out關(guān)鍵字聲明通過引用傳遞方式傳遞參數(shù),引用傳遞是把實在參數(shù)的地址傳給形式參數(shù),形式參數(shù)和實在參數(shù)指向同一個存儲單元,對形式參數(shù)的改變就是對實在參數(shù)的改變。out與ref類似,二者的區(qū)別是,ref要求參數(shù)在傳遞之間必須初始化,out則不要求初始化。
可參考文章:
C#的兩種類據(jù)類型:值類型和引用類型- 博主簡介:
- 工業(yè)自動化上位機軟件工程師、機器視覺算法工程師、運動控制算法工程師。目前從業(yè)于智能制造自動化行業(yè)。 博主郵箱:2296776525@qq.com
- 幫忙點個贊吧。哈哈。
總結(jié)
以上是生活随笔為你收集整理的从一般到特殊-C#中的对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css 滤镜之AlphaImageLoa
- 下一篇: namespace-C#命名空间