搜尋
首頁後端開發C#.Net教程SUNWEN教程之----C#進階(四)

大家好,我是武漢華師的SUNWEN.呵呵,下午好不容易有了時間出去玩了,到了歸元寺.門票十元,不算貴,SUNWEN照了好多像,用不了多久,就可以讓大家看一看了.

閒話少說,讓我們進入正題.這次我要向大家講的是C#中的屬性.屬性是什麼呢,比如說我是男的,男就是我的一人屬性.我是一個大一的學生,大一也是我的一個屬性.屬性就是一個對象的性質.很簡單吧,呵呵!下面,我給出兩個例子,第一個例子出明瞭如何聲明一個可以修改的屬性,另一個例了建立了一個抽象的屬性(Abstract),並且說明瞭如何在子類中丟棄它.好,下面讓我們開始吧.

例子一:


000: // PRopertiesperson.cs
001 : using System;
002: class Person
003: {
004: private string myName ="N/A";
005: private int myAge = 0;
006:05: private int myAge = 0;
006: 型
008: public string Name
009: {
010: get 
011: {
012: return myName; 
013: }
014: set 15:016;
018: }
019: 
020: // 宣告一個int型的Age屬性
021: public int Age
022: {
023: get 
024: { 
:025: return myAge
024: { 
): : { 
029: myAge = value; 
030: }
031: }
032: 
033: public override string ToString()
034: {
035: return
034: {
035: return
Age;
036: }
037: 
038: public static void Main()
039: {
040: Console.WriteLine("Simple Properties");
041: 
: Person person = new Person();
044: 
045: //印出它的屬性
046: Console.WriteLine("Person details - {0}", person);
047: 
048: // 對屬性進行一些設定
049: person.Name = "Joe";
050: person.Age = 99;
051: Console.WriteLine("Person details - {0}", person);
052: 
053://}", person);
052: 
/ 增加年齡
054: person.Age += 1;
055: Console.WriteLine("Person details - {0}", person);
056: }
057: }
這個例子的輸出是: Properties

Person details - Name = N/A, Age = 0

Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100

好了,又起床了,昨天寫到這,就跑到床上睡了,呵呵.現在是五一的第二天,看看我今天能寫幾篇,昨天寫了二篇.

從上面的程序我們可以看出,一個類的屬性的設置,借用了VB的概念,和java中不盡相同了.(這就是M$,TMD!)有的朋友可能很奇怪,為什麼我們可以用Console.WriteLine()來打印一個對象person呢.其實道理很簡單,和在JAVA中的一樣,當調節器用一個打印方法時,這個對象自動調用它的ToString()(在JAVA中是toString,TMD,又差點犯錯!)方法.在33行,我們可以看到有這個方法的影子,override這個關鍵字大概就是覆蓋父類別的方法吧,這是不是有點多餘?我們可以看到,一個物件的屬性的設定是透過一個get()和set()組合來完成的,當然,還有一個value這個東東.補充一下,你還可以控制一個屬性的讀/寫權限,只是把get()和set()簡單地去掉就可以了,比如你不要寫的屬性,就不要set()就可以了,如果你不要讀,就不要get()吧.總得感覺,C#在這點上沒有JAVA來的靈活(完了,又要被蓋痴打了!).

第二個例子:

這個例子說明瞭如何建立抽象的屬性(Abstract),什麼是抽象的屬性呢,所謂的抽象的屬性呢,就是....(唉,每次廢話都這麼多!FT) 一個抽象類別並不提供執行屬性存取程式,並且,他可以在子類別中被忽略.下面的例子有三個檔案,你要分別編譯它們才能得到結果,它們是:

abstractshape.cs: Shape類別,包含一個Area抽象屬性 

shapes.cs: Shape的子類 

shapetest.cs: 顯示程式. 
要編譯這些程式,運行:csc abstractshape.cs shapes.cs shapetest.cs就可以了.運行完之後,它會產生shapetest.exe這個可執行程式.

000: // Propertiesabstractshape.cs
001: using System;
002:
003: public abstract class Shape
004: {
005: private string mype
004: {
005: private string myId
04: {
005: private string myId; {
009: Id = s; // 這句話呼叫了Id屬性的set建構器
010: }
011:
012: public string Id
013: {
014: get15: ;
017: }
018:
019: set
020: {
021: myId = value;
022: }
023: }
024:
025: public abme023: }
024:!
028: }
029:
030: public override string ToString()
031: {
032: return Id + " Area = " + double.Format(Area, "F");
033: }
033: }

看這個程式, 實際上非常地簡單,當這個類別對的物件被建立時,初始化部分為007-010,它把建立物件的參數s給了Id這個屬性.然後進行了上一個例子的操作.實際上,我們可以把抽象屬性與JAVA中的介面(Interface)相比,它們只提拱一個方法的名稱,而不提供這個方法的內容.就像Area這個抽象屬性,有一個get,但是它並沒有指定get方法(也許它不能稱之為方法)裡的內容,即要get做什麼事情. 這個事情,由它的子類來做.

第二個文件:在這個文件中,一個類覆蓋了(override)了Area屬性.

000: // Propertiesshapes.cs

001: public class Square : Shape
002: {
003: private int mySide;
004: publicstring, publicstring ) : base(id)
006: {
007: mySide = side;
008: }
009:
010: public override double Area
011: {
010: public override double Area
011: {my/3012: get3012: 73030333: 30333:03012:303333333:7033:70333:7033:7033:7033:7072:03:7012: ;
015: }
016: }
017: }
018:
019: public class Circle : Shape
020: {
021: private int myRadius
022: 83); : base(id)
024: {
025: myRadius = radius;
026: }
027:
028: public override double Area
029: {
030: get3m 30 System.Math.PI;
033: }
034: }
035: }
036:
037: public class Rectangle : Shape
038: {
042: public Rectangle(int width, int height, string id) : base(id)
043: {
044: myWidth = width;
045: myHeight = height; double Area
049: {
050: get
051: {
052: return myWidth * myHeight;
053: }
054: }
055: }
053: }
054: }
055: }
053: }
054: }
055: }
這個例子就有些讓我們一頭霧的,好像是繼承,相當於JAVA中的extends吧.我想是的.我們先看一看吧.

下面的第三個文件就是一個測試文件了,很簡單,大家看一看.

000: // Propertiesshapetest.cs
001: public class TestClass
002: {

003: public static void Main()

004: {

005: Shape[] shapes Main()

004: {
005: Shape[] shapes = Square
006: "Square #1"),
008: new Circle(3, "Circle #1"),
009: new Rectangle( 4, 5, "Rectangle #1")
010: };
011: 
System. .Console.WriteLine("Shapes Collection");
013: foreach(Shape s in shapes)
014: {
015: System.Console.WriteLine(s);
016: }
017:50017: : }
從這個例子上看,:這個符號的確是extends的意思,就是繼承.繼承是什麼意思,說白了,就是生孩子的意思.比如下面一句sunwenson extends sunwen,這名就是說sunwenson這個類繼承了sunwen,sunwenson這個類別有sunwen類的所有東西,同時可以添加和刪除sunwen中的一些東西.就這麼簡單,但是這是現代軟體發展的一項重要技術,因為它可以使軟體的重用性大大提高.唉,這些就只有大三大四的人說了,我就沒資格了.呵呵.

這個程序的輸出是:

Shapes Collection
Square #1 Area = 25.00
Circle #1 Area = 28.27
Rectangle #1 Area = 20.00

完了,這一節又完了.要理解這一節,有一定的難度, 特別對那些沒有JAVA或C++程式設計經驗的朋友.不過不要害怕,鼓起勇氣學下去,一定會有所收穫的. 我也要休息一下了,嘿嘿,早餐還沒吃呢!

 以上就是SUNWEN教程之----C#進階(四)的內容,更多相關內容請關注PHP中文網( www.php.cn)!





陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使用C#编写时间序列预测算法如何使用C#编写时间序列预测算法Sep 19, 2023 pm 02:33 PM

如何使用C#编写时间序列预测算法时间序列预测是一种通过分析过去的数据来预测未来数据趋势的方法。它在很多领域,如金融、销售和天气预报中有广泛的应用。在本文中,我们将介绍如何使用C#编写时间序列预测算法,并附上具体的代码示例。数据准备在进行时间序列预测之前,首先需要准备好数据。一般来说,时间序列数据应该具有足够的长度,并且是按照时间顺序排列的。你可以从数据库或者

如何使用Redis和C#开发分布式事务功能如何使用Redis和C#开发分布式事务功能Sep 21, 2023 pm 02:55 PM

如何使用Redis和C#开发分布式事务功能引言分布式系统的开发中,事务处理是一项非常重要的功能。事务处理能够保证在分布式系统中的一系列操作要么全部成功,要么全部回滚。Redis是一种高性能的键值存储数据库,而C#是一种广泛应用于开发分布式系统的编程语言。本文将介绍如何使用Redis和C#来实现分布式事务功能,并提供具体代码示例。I.Redis事务Redis

如何实现C#中的人脸识别算法如何实现C#中的人脸识别算法Sep 19, 2023 am 08:57 AM

如何实现C#中的人脸识别算法人脸识别算法是计算机视觉领域中的一个重要研究方向,它可以用于识别和验证人脸,广泛应用于安全监控、人脸支付、人脸解锁等领域。在本文中,我们将介绍如何使用C#来实现人脸识别算法,并提供具体的代码示例。实现人脸识别算法的第一步是获取图像数据。在C#中,我们可以使用EmguCV库(OpenCV的C#封装)来处理图像。首先,我们需要在项目

C#开发中如何处理跨域请求和安全性问题C#开发中如何处理跨域请求和安全性问题Oct 08, 2023 pm 09:21 PM

C#开发中如何处理跨域请求和安全性问题在现代的网络应用开发中,跨域请求和安全性问题是开发人员经常面临的挑战。为了提供更好的用户体验和功能,应用程序经常需要与其他域或服务器进行交互。然而,浏览器的同源策略导致了这些跨域请求被阻止,因此需要采取一些措施来处理跨域请求。同时,为了保证数据的安全性,开发人员还需要考虑一些安全性问题。本文将探讨C#开发中如何处理跨域请

Redis在C#开发中的应用:如何实现高效的缓存更新Redis在C#开发中的应用:如何实现高效的缓存更新Jul 30, 2023 am 09:46 AM

Redis在C#开发中的应用:如何实现高效的缓存更新引言:在Web开发中,缓存是提高系统性能的常用手段之一。而Redis作为一款高性能的Key-Value存储系统,能够提供快速的缓存操作,为我们的应用带来了不少便利。本文将介绍如何在C#开发中使用Redis,实现高效的缓存更新。Redis的安装与配置在开始之前,我们需要先安装Redis并进行相应的配置。你可以

如何使用C#编写动态规划算法如何使用C#编写动态规划算法Sep 20, 2023 pm 04:03 PM

如何使用C#编写动态规划算法摘要:动态规划是求解最优化问题的一种常用算法,适用于多种场景。本文将介绍如何使用C#编写动态规划算法,并提供具体的代码示例。一、什么是动态规划算法动态规划(DynamicProgramming,简称DP)是一种用来求解具有重叠子问题和最优子结构性质的问题的算法思想。动态规划将问题分解成若干个子问题来求解,通过记录每个子问题的解,

如何实现C#中的遗传算法如何实现C#中的遗传算法Sep 19, 2023 pm 01:07 PM

如何在C#中实现遗传算法引言:遗传算法是一种模拟自然选择和基因遗传机制的优化算法,其主要思想是通过模拟生物进化的过程来搜索最优解。在计算机科学领域,遗传算法被广泛应用于优化问题的解决,例如机器学习、参数优化、组合优化等。本文将介绍如何在C#中实现遗传算法,并提供具体的代码示例。一、遗传算法的基本原理遗传算法通过使用编码表示解空间中的候选解,并利用选择、交叉和

如何使用C#编写背包问题算法如何使用C#编写背包问题算法Sep 19, 2023 am 09:21 AM

如何使用C#编写背包问题算法背包问题(KnapsackProblem)是一个经典的组合优化问题,它描述了一个给定容量的背包以及一系列物品,每个物品都有自己的价值和重量。目标是找到一种最佳策略,使得在不超过背包容量的情况下,装入背包的物品总价值最大。在C#中,可以通过动态规划方法来解决背包问题。具体实现如下:usingSystem;namespace

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器