從一般到特殊-C#中的對象

文章目錄

  • 對象的概念
  • 對象的創建和使用
  • 匿名類型和初始化器
  • 構造函數和析構函數
    • 構造函數
    • 析構函數
    • 范例
  • 參數傳遞

  • 博主寫作不容易,孩子需要您鼓勵
  • 萬水千山總是情 , 先點個贊行不行

對象的概念

類是具有相同特征一類事物的抽象,而對象是類的實例。
類和對象有本質的區別,類是從對象中抽取出來的一類對象的描述,對象是類中的個體,是一個具體的事物,創建對象就是從抽象到具體的過程,是將類的屬性和行為實例化的過程。類與對象的關系可以比喻為設計手機和具體手機的關系,類就像手機機型設計一樣說明了手機所應該具備的所有屬性和功能,但是手機設計并不是手機;對象就是跟據手機設計而制造出來的手機,它具有手機的所有功能,能打電話發短信。

對象的創建和使用

類是抽象的,要使用類中非靜態的成員,就必須創建類的對象,創建對象就是類的實例化過程。
C#使用new運算符創建對象。

  • 語法格式如下:
  • 類名 對象名 = new 類名(參數列表);
    

    其中,參數列表是可選的。
    如創建Phone類的一個對象如下:

    class PhoneClass{public string brand;public string type;}class Program{static void Main(string[] args){PhoneClass Phone = new PhoneClass();//創建Phone類的一個對象Phone.brand = "huawei";Phone.type = "5G";Console.WriteLine("手機品牌是:" + Phone.brand);Console.WriteLine("手機種類是:" + Phone.type);Console.ReadKey();}}
    

    對象的使用是通過訪問對象中的非靜態成員來實現的。

  • 訪問對象中的非靜態成員語法如下:
  • 對象名.成員名
    

    如Phone類的一個對象的使用如下:

    class PhoneClass{public string brand;public string type;}class Program{static void Main(string[] args){PhoneClass Phone = new PhoneClass();//創建Phone類的一個對象Phone.brand = "huawei";Phone.type = "5G";Console.WriteLine("手機品牌是:" + Phone.brand);//Phone對象的使用Console.WriteLine("手機種類是:" + Phone.type);//Phone對象的使用Console.ReadKey();}}
    

    匿名類型和初始化器

    匿名類型是C#3.0新增功能,能簡化對象的初始值設置。使用對象初始化,創建類的對象并對其屬性成員賦值。
    舉例如下:

    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,點的縱坐標}
    

    使用對象初始化,可以這樣創建對象并對屬性賦值

    Point P = new Point() { X = 0.0, Y = 0.0 };     //創建對象P并對XY賦值
    

    使用匿名類型可以定義內嵌的類型,不需要顯示的定義一個類型。假設沒有定義Point類,卻要使用一個Point的對象,可以使用對象初始化器,不用指定類名。
    例如:

    var p = new { X = 0.0, Y = 0.0 };   //創建匿名類型p,并使用對象初始化器賦值。
    

    構造函數和析構函數

    對象和客觀世界的事物一樣,從創建到消亡都有一個生命周期,對象的創建和銷毀是通過類的構造函數和析構函數來完成的。

    構造函數

    構造函數是類的特殊方法成員,其名稱和類名相同,主要用來完成對象的初始化。
    C#通過new創建對象的過程實際上就是調用類的構造函數的過程,創建對象時調用構造函數對對象進行初始化。每個類都有構造函數,如果沒有定義,系統也會提供一個默認的構造函數,默認的構造函數一般不進行什么操作。在訪問一個類的時候,系統最先執行構造函數中的語句。

    析構函數

    析構函數是對象銷毀前釋放所占用的系統資源的類的成員。析構函數的名字是在類名前加一個“~”符號。析構函數不接受任何參數,也不返回任何值。
    例如:

    public class Point               //定義Point類{                                // 類的屬性定義中set,get可以簡寫為以下形式  Point(){//構造函數               //構造函數內容}~Point()                     //析構函數名{//析構函數               //析構函數內容}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("無參數構造函數演示");Console.WriteLine("X:" + p1.X);Console.WriteLine("Y:" + p1.Y);Point p2 = new Point(2.0,3.0);Console.WriteLine("有參數構造函數演示");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;//構造函數               //構造函數內容}public Point(double x,double y){X = x; Y = y;//構造函數               //構造函數內容}~Point()                     //析構函數名{Console.WriteLine("清理資源");//析構函數               //析構函數內容}public double X { get; set; }//定義屬性X,點的橫坐標public double Y { get; set; }//定義屬性Y,點的縱坐標}
    }
    

    運行結果:
    在這里插入圖片描述

    參數傳遞

    C#的許多方法成員是有參數的,定義方法時聲明的參數是形式參數,調用方法時要給形式參數傳值,傳遞方法的值是實參。C#有“值傳遞”和“引用傳遞”兩種傳遞參數類型。值傳遞是C#默認的傳遞方式,使用值傳遞方式時,向形式參數傳遞實在參數的副本,方法內發生的對形式參數的更改對實在參數本身沒有影響,就像文件的復印件一樣,無論如何修改復印件,原件沒有任何改變。如果希望所調用的方法能更改實在參數的值,則必須使用ref或out關鍵字聲明通過引用傳遞方式傳遞參數,引用傳遞是把實在參數的地址傳給形式參數,形式參數和實在參數指向同一個存儲單元,對形式參數的改變就是對實在參數的改變。out與ref類似,二者的區別是,ref要求參數在傳遞之間必須初始化,out則不要求初始化。

    可參考文章:
    C#的兩種類據類型:值類型和引用類型

    • 博主簡介:
    • 工業自動化上位機軟件工程師、機器視覺算法工程師、運動控制算法工程師。目前從業于智能制造自動化行業。 博主郵箱:2296776525@qq.com
    • 幫忙點個贊吧。哈哈。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254305.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何用面對對象來做一個躁動的小球?

今天來看看怎樣用面對對象來做一個躁動的小球。 首先我們先創建一個對象&#xff0c;他的屬性包含小球的隨機水平、縱向坐標&#xff0c;隨機寬、高&#xff0c;隨機顏色&#xff0c;以及創建小球的方法。 html: <div id"wrap"></div> js:function Boll(…

關于MyEclipse項目的名字的修改對項目導入導出的影響

不要修改項目名字&#xff0c;不管是在MyEclipse中(.project文件里面的額name會變)還是在G:\MyEclipseData目錄下(.project文件里面的額name不會變)&#xff0c;否則導入的時候不能訪問&#xff0c;會出現400的錯誤&#xff0c;而訪問的網址必須是以前沒改名前的那個名字才可以…

Gcc詳解以及靜態庫、動態庫生成

[轉] Gcc詳解以及靜態庫、動態庫生成 http://www.360doc.com/content/10/0619/14/1795182_33985297.shtml 1。gcc包含的c/c編譯器 gcc,cc,c,g,gcc和cc是一樣的&#xff0c;c和g是一樣的&#xff0c;(沒有看太明白前面這半句是什 么意思:))一般c程序就用gcc編譯&#xff0c;c程序…

改變世界的七大NLP技術,你了解多少?(上)

什么是NLP&#xff1f; 自然語言處理&#xff08;NLP&#xff09; 是計算機科學&#xff0c;人工智能和語言學的交叉領域。目標是讓計算機處理或“理解”自然語言&#xff0c;以執行語言翻譯和問題回答等任務。 隨著語音接口和聊天機器人的興起&#xff0c;NLP正在成為信息時代…

MINI類-結構體

文章目錄結構體的定義和使用實例類和結構體的關系博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 結構體與類相似&#xff0c;通常用來封裝小型的相關變量組&#xff0c;例如&#xff0c;學生的學號、姓名、性別、年齡等。結構是一種值類型&am…

由.def文件生成lib文件[轉]

最近在學習curl庫時&#xff0c;碰到一個問題&#xff0c;從官網上下載了一個lib版的&#xff0c;卻發現只有.dll&#xff0c;沒有lib文件&#xff0c;感覺很奇怪&#xff0c;google了之后才知道&#xff0c;原來庫作者的用意是讓用戶自己生成lib文件&#xff0c;下載到的lib文…

union 和 union all 有什么不同?

假設我們有一個表 Student&#xff0c; 包括以下字段與數據&#xff1a;drop table student;create table student( idint primary key,name nvarchar2(50) not null,score number not null);insert into student values(1,Aaron,78);insert into student values(2,Bill,76);in…

暴風影音硬件加速播放高清影片

近年來&#xff0c;高清視頻因為畫面清晰、視覺效果好&#xff0c;越來越受到眾多電腦用戶的厚愛。暴風影音3.6版本在高清的支持上&#xff0c;筆者必須得說&#xff0c;是暴風影音在高清方面的一個大跨越&#xff0c;在這個技術上&#xff0c;暴風把KMP等播放器都遠遠的拋在后…

SSL雙向認證的實現

2019獨角獸企業重金招聘Python工程師標準>>> 環境 系統&#xff1a;archlinux/centOS nginx&#xff1a;nginx/1.12.2 瀏覽器&#xff1a;火狐firefox 前提&#xff1a;1.安裝nginx。    2.安裝openssl。 生成證書 新建工作目錄 首先建立一個工作目錄&#x…

partial 分部類-龐大類的瘦身計劃

文章目錄使用情況語法博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 一般來說&#xff0c;一個類、結構或者接口位于一個源文件中&#xff0c;但是某些情況&#xff0c;比如大型項目、特殊部署時&#xff0c;可能需要把一個類、結構或者接口放…

scroll-view——小程序橫向滾動

這是官方給的布局代碼 <view class"section"><view class"section__title">vertical scroll</view><scroll-view scroll-y style"height: 200px;" bindscrolltoupper"upper" bindscrolltolower"lower"…

二期設計

電子鎖管理 設備管理 設備管理 1 信息編輯;回收電子鎖發放 電子鎖初始化&#xff0c;發放 4 記錄車輛在發車時使用的電子鎖電子鎖開鎖聯系人管理 電子鎖開鎖聯系人管理 1 根據訂單路線中的投點&#xff0c;設置每個投遞點的開鎖聯系人&#xff0c;通過短信的方式下發給你開…

音視頻同步系列文章之------時間戳與時間尺度(time scale)

根據一些文章我自己推敲了一下幾個概念如下&#xff1a; 采樣頻率是每秒鐘抽取聲波幅度樣本的次數。8000 幀率是每秒顯示幀數。 20 時間戳單位&#xff1a;時間戳計算的單位不為秒之類的單位&#xff0c;而是由采樣頻率所代替的單位&#xff0c;這…

30秒無需編碼完成一個REST API服務

JSON Server 30秒內無需編碼快速完成一個模擬的REST API服務。 這個服務主要是給那些需要快速的模擬原型后端接口的前端人員使用的 GitHub&#xff1a;github.com/typicode/js… 安裝 $ npm install -g json-server 復制代碼Example 新建一個 db.json 文件 {"posts":…

namespace-C#命名空間

博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 C#程序是利用命名空間組織起來的。命名空間既做程序的內部組織系統&#xff0c;又用做外部組織系統。就像一個國家為了便于管理&#xff0c;分成多個省份一樣。 聲明命名空間 命名空間是.NET …

NKU 專題一 題解

A - Flip Game 總的情況數只有2^16次方種&#xff0c;顯然直接bfs就可以了 1 #include<iostream>2 #include<queue>3 #include<cstring>4 using namespace std;5 int W,B,start;6 bool have[1000000];7 struct plot{8 int n,step;9 }; 10 void input(int…

僵尸進程(轉)

前面的文章中&#xff0c;我們已經了解了父進程和子進 程的概念&#xff0c;并已經掌握了系統調用exit的用法&#xff0c;但可能很少有人意識到&#xff0c;在一個進程調用了exit之后&#xff0c;該進程并非馬上就消失掉&#xff0c;而是留下一個稱為僵尸進 程&#xff08;zomb…

ComblockEngine 引擎實踐

comblockEngine 參考資料 官方網址 學習備注 熟悉內容 1.python 的字符串操作 2.flags 屬性的作用域 flags等 問題每天 1 1.基本數據類型 基本類型 2.數據庫表的操作 操作1 3.屬性的定義在.def中。self.出來之后&#xff0c;在繼承多個類的時候會不會重復。應該是子類的屬性覆蓋…

王陽明詩歌集

此心光明&#xff0c;夫復何求。&#xff08;王陽明死前對弟子的遺言&#xff09; 0. 非常少年、非常父子 山近月遠覺月小&#xff0c;便道此山大于月。若人有眼大如天&#xff0c;當見山高月更闊。—— 《蔽月山房》&#xff0c;作于12歲&#xff1b;1. 中秋 吾心自有光明月&a…

子承父業-C#繼承

文章目錄繼承的定義和使用實例繼承的特性繼承的可傳遞性繼承的單一性繼承中的訪問修飾符base和this關鍵字basethis實例博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 繼承是軟件復用的一種形式。使用繼承可以復用現在類的數據和行為&#xff…