任何一門語言,基礎知識非常重要。就昨天所遇到的問題:數(shù)據(jù)運算得到的值是 0 。程序的運算不是我們所學的數(shù)學運算,只用加減乘除就能直接得出結(jié)果。還要使用數(shù)據(jù)類型來使這個數(shù)的結(jié)果是我們所想要的。比如使用int類型得到的值永遠是int的,并且會進行向下取值。要得到準確的數(shù)值可以選擇使用double類型。
1.C#數(shù)據(jù)類型及轉(zhuǎn)換
2.類的創(chuàng)建與使用
3.類的繼承和多態(tài)
4.接口創(chuàng)建與實現(xiàn)
5.委托與事件
整數(shù)類型、布爾類型、字符類型、浮點類型、decimal
例如:byte、short、int、long、uint(無符號32位整數(shù))、
float、double
decimal:用于財務和貨幣計算的128位數(shù)據(jù)類型。例如:decimal myMoney = 100.3m;
布爾類型:C#中邏輯量只有 true 和 false。
結(jié)構(gòu)類型是一種值類型。而類類型是一種引用類型
結(jié)構(gòu)主要用于創(chuàng)建小型的對象以節(jié)省內(nèi)存,如:復數(shù)、坐標系中的點、字典中的“鍵-值”對都是結(jié)構(gòu)的典型示例。
using System;
struct Rectangle
{public int x,y;
public int width,height;
public Rectangle(int a,int b,int w,int h)
{x=a;
y=b;
width=w;
height=h;
}
}
class TestStruct
{public static void Main()
{Rectangle myRect;
myRect.x = 20;
myRect.y = 30;
myRect.width = 200;
myRect.height = 300;
}
}
1.1.3 枚舉類型用于聲明一組命名的常數(shù)。每種枚舉類型均有一種基礎類型,此基礎類型可以是除char類型外的任何類型。
枚舉元素的默認基礎類型為int。例如:
enum WeekDay{Sun,Mon,Tue,Wed,Thu,Fri,Sat}
不同元素的值可以相同。
如果枚舉元素的數(shù)據(jù)類型不是int型,則可以用如下方式進行聲明。
enum Color:long{Red,Green,Blye};
示例:使用枚舉
using System;
public class TestEnum
{enum Range:long{Max=214723233L,Min=255L}
public static void Main()
{long a = (long)Range.Max;
long b = (long)Range.Min;
}
// 下面再看一個例子:
enum Color{Red=Green,Green,Blue}
}
1.1.4 數(shù)組類型是由抽象基類System.Array派生的引用類型,代表一組相同類型變量的集合,其中每一個變量稱為數(shù)組的元素。
數(shù)組元素可以為任意類型,包括數(shù)組類型。
對數(shù)組元素的訪問是通過數(shù)組下標來實現(xiàn)的。
聲明一個數(shù)組時,方括號必須跟在類型后面,例如: int[] color
可以指定數(shù)組的長度 : int[5] color;
1.一維數(shù)組和多維數(shù)組
int[] a = new int[3];
// 為每個數(shù)組元素賦值,完成初始化
a[0] = 1;
a[1] = 2;
a[2] = 3;
// 聲明一個2行2列的二維數(shù)組如下。
int[,] a = new int[2,2];
// 為每個數(shù)組元素賦值,以完成初始化
a[0,0] =1;
a[0,1] =2;
a[1,0] =3;
a[1,1] =4;
// 聲明一個三維數(shù)組
int[,,] b = new int[3,2,2];
1.1.5 類類型類是C#中最重要的組成部分,也是C#基礎,它用來生成新的引用類型。類是一種數(shù)據(jù)結(jié)構(gòu),
object 、 string
隱式轉(zhuǎn)換、顯式轉(zhuǎn)換、用戶自定義轉(zhuǎn)換
例如: int a = 100; float b=a;
所有內(nèi)容都被封裝在類中,類是C#基礎。
(1)類聲明
class關(guān)鍵字、類名、類體
類修飾符包括 new、public、protected、internal、private、abstract
聲明一個Person類:
using xxx;
public class Person
{private string name;
private int age;
private long ID;
public Person(string n,int a,long I)
{name = n;
age = a;
ID = I;
}
}
該類聲明了三個私有數(shù)據(jù)成員 name、age、ID。兩個共有函數(shù)成員Person和Display
(2)創(chuàng)建類實例
聲明了類之后,就可以通過new 關(guān)鍵字來創(chuàng)建類實例,類實例是一個引用類型的變量。類實例創(chuàng)建的格式為 : 類名 實例名 = new 類名(參數(shù)) Person p = new Person()
實際上,是使用new關(guān)鍵字調(diào)用類的構(gòu)造函數(shù)完成類的初始化工作。
(3)類成員
類成員分為兩大類。
類本身聲明的成員和從基類繼承來的成員。
類成員包括函數(shù)成員和數(shù)據(jù)成員。
聲明一個含有靜態(tài)成員和一個實例成員的Student類
using System;
class Student
{int SNO; // 實例成員
static int count; // 靜態(tài)成員
public Student(int s)
{SNO = s;
Count++;
}
public void display()
{ }
public static void Main()
{Student s1 = new Student(12);
s1.display();
}
}
在上例子中,每生成一個學生實例,靜態(tài)成員count就自動增一。
(4)構(gòu)造函數(shù)和析構(gòu)函數(shù)
構(gòu)造函數(shù)是特殊的成員函數(shù),主要用于為對象分配空間,完成初始化工作。構(gòu)造函數(shù)的特殊性表現(xiàn)在以下幾個方面。
構(gòu)造函數(shù)的名字必須與類名相同
構(gòu)造函數(shù)可以帶參數(shù),但沒有返回值
構(gòu)造函數(shù)在對象定義時被自動調(diào)用
使用構(gòu)造函數(shù)和析構(gòu)函數(shù):
using System;
class Complex
{double imag,real;
public Complex(){} // 無參數(shù)構(gòu)造函數(shù)
public Complex(double r,double i)
{imag = i;
real = r;
}
~Complex(){} // 析構(gòu)函數(shù)
}
(5)方法
方法是表現(xiàn)類或?qū)ο笮袨榈某蓡T函數(shù),用于把程序分解為小的單元。
方法聲明
方法聲明的格式:
屬性集 方法修飾符 返回類型 方法名(形參列表){方法體}
方法的修飾符:new public void ......
方法參數(shù):值參數(shù)、引用參數(shù)、輸出參數(shù)和參數(shù)數(shù)組
使用參數(shù):
class TestValue
{static void Swap(int a ,int b)
{int t;
t=a;
a=b;
b=t;
}
static void Main()
{int x=10,y=20;
Console.WriteLine("x={0},y={1}",x,y);
Swap(x,y);
Console.WriteLine("x={0},y={1}",x,y);
}
}
輸出結(jié)果為 x=10,y=20
x=10,y=20;
示例中的函數(shù)Swap有兩個值參數(shù)a和b,在函數(shù)內(nèi)交換了a和b的值并不影響原自變量x和y的值。
引用參數(shù)
用ref修飾符聲明的參數(shù)為引用參數(shù)。
使用引用參數(shù)
class TestValue
{static void Swap(ref int a , ref int b)
{int t;
t = a;
a = b;
b = t;
}
static void Main()
{int x=10,y=20;
Console.WriteLine("x={0},y={1}",x,y);
Swap(ref x,ref y);
Console.WriteLine("x={0},y={1}",x,y);
}
}
輸出結(jié)果為
x=10,y=20
x=20,y=10
示例中的函數(shù)Swap有兩個引用參數(shù)a和b,在函數(shù)內(nèi)交換a和b的值同時也交換了原自變量x和y的值。
輸出參數(shù)
用out修飾符定義的參數(shù)稱為輸出參數(shù)。如果希望函數(shù)返回多個值,可使用輸出參數(shù)。
class TestOut
{static int OutMultiValue(int a,out char b)
{b=(char) a;
return 0;
}
static void Main()
{int t = 65,r;
char m;
r=OutMultiValue(t,m);
Console.WriteLine("r={0},m={1}",r,m);
}
}
輸出結(jié)果為 r = 0 m = A
參數(shù)數(shù)組
用params修飾符聲明的變量稱為參數(shù)數(shù)組,它允許向函數(shù)傳遞個數(shù)變化的參數(shù)。
使用參數(shù)數(shù)組:
using System;
class TestParams
{static void MultiParams(params int[] var)
{for(int I=0;Iint[] arr = {10,20,30};
MultiParams(arr);
MultiParams(100,200);
MultiParams();
}
}
靜態(tài)方法和實例方法
用static修飾符 聲明的方法為靜態(tài)方法,未用static修飾符聲明的方法為實例方法。
靜態(tài)方法不對特定實例進行操作,不與實例相關(guān)聯(lián),它屬于類。因為靜態(tài)方法和類相關(guān)聯(lián),所以調(diào)用靜態(tài)方法不需要創(chuàng)建類實例。要調(diào)用靜態(tài)方法,只需要類名和方法名。靜態(tài)方法只能訪問類中的靜態(tài)成員,訪問非靜態(tài)成員是錯誤的。
實例方法對類的某個給定的實例進行操作,而且可以用this來訪問該實例。它屬于實例對象。實例方法可以訪問類中的任何成員。
using System;
class TestMethod
{static int x; // 靜態(tài)數(shù)據(jù)成員
int y; // 非靜態(tài)數(shù)據(jù)成員
static void A()
{x=10; // 正確,在靜態(tài)方法中訪問靜態(tài)成員
y=20; // 錯誤,在靜態(tài)方法中訪問非靜態(tài)成員
}
void B()
{x=10; // 正確,在實例方法中訪問靜態(tài)成員
y=20; // 正確,在實例方法中訪問非靜態(tài)成員
}
static void Main()
{TestMethod t = new TestMethod();
TestMethod.A(); // 使用類名調(diào)用靜態(tài)方法
t.B(); // 使用實例調(diào)用實例方法
}
}
方法重載
方法重載允許一個類中有同名的方法存在,即一個類中可以有兩個以上的方法取相同的名字。為了區(qū)分這些同名的方法,要求方法有不同的參數(shù),要么參數(shù)個數(shù)不同,要么參數(shù)類型不同。
使用方法重載:
using System;
class TestMethod
{int square(int x)
{return x*x;
}
double square(double x)
{return x*x;
}
decimal square(decimal x)
{return x*x;
}
static void Main()
{TestMethod t = new TestMethod();
Console.WriteLine("The square is {0},{1},{2}",t.square(10),......)
}
}
該類有三個重載函數(shù)square,用于計算int、double、decimal類型數(shù)的平方。三個函數(shù)的區(qū)別在于參數(shù)類型不同。
操作符重載
操作符重載可以對C# 中已有的操作符賦予新的功能
重載Point類的 “++” 和 "+"操作符
using System;
class Point(int a,int b)
{private int x,y;
public Point(int a ,int b)
{x=a;
y=b;
}
//操作符"++"重載
public static Point operator ++(Point p)
{p.x ++;
p.y ++;
return p;
}
public void Display()
{Console.WriteLine("Point.x={0},Point.y={1}",x,y);
}
// 操作符 "+" 重載
public static Point operator +(Point p1,Point p2)
{Point p = new Point(0,0);
p.x = p1.x + p2.x;
p.y = p1.y + p2.y;
return p;
}
static void Main(string[] args)
{Point a = new Point(10,20);
Point b = new Point(30,40);
a = a+b;
a.Display();
a++;
a.Display();
}
}
程序輸出結(jié)果: Point.x=40,Point.y=60 Point.x=41,Point.y=61
程序中分別對一元運算符“++”和二元運算符“+”進行了重載。分別完成點的坐標值自增一和兩個點坐標相加的功能。
this關(guān)鍵字
引用類的當前實例,成員通過this關(guān)鍵字可以知道自己屬于哪個實例。this關(guān)鍵字是一個隱含引用,它隱含于每個類的成員函數(shù)中。但需要注意的是靜態(tài)成員函數(shù)沒有this指針。this關(guān)鍵字可用于從構(gòu)造函數(shù)、實例方法和實例訪問器中訪問成員。
以下是this的常用用途。
~ 限定被相似的名稱隱藏的成員。例如:
public Employee(string name,string alias)
{this.name = name ;
this.alias = alias;
}
~ 將對象作為參數(shù)傳遞到其他方法,例如:
CalcTax(this)
~ 聲明索引器,例如:
public int this [int param]
{get
{return array[param];
}
set
{array[param] = value;
}
}
(6)字段與屬性
字段
字段表示與對象或類相關(guān)聯(lián)的變量。字段包括靜態(tài)字段、實例字段和只讀字段。用static修飾符聲明的字段為靜態(tài)字段,與靜態(tài)變量相同,無論存在多少個類實例,他們都共享一個靜態(tài)字段副本。
使用字段:
using System;
class Goods
{public double high;
public readonly double width = 30;
public static int count = 0;
public Goods(double h,double w)
{high = h;
width = w;
count ++;
}
static void Main(string[] args)
{Goods y = new Goods(100,200);
Console("high={0},width={1};count={2}",y.high,y.width,Goods.count);
Goods z = new Goods(300,400);
Console(...);
}
}
輸出結(jié)果為:high=100,width=200,count=1
high=300,width=400,count=2
以上例子聲明了實例字段high,它的生命周期為類實例生成到類實例撤銷為止。靜態(tài)字段count,它的生命周期為類的載入到類的撤銷為止。只讀字段width,它的生命周期與實例字段相同。如果在類Goods中聲明一個函數(shù):
public void setwidth(double w)
{width = w;
}
則會出現(xiàn)錯誤,因為只讀字段的值只能在聲明時和在構(gòu)造函數(shù)中改變。
屬性
屬性用于刻畫對象的特征或表示對象的狀態(tài),它提供對類或?qū)ο笮再|(zhì)的訪問。比如窗口標題、窗口位置、客戶名稱等,都可以作為屬性。屬性和字段不同,它不表示存儲位置,相反,屬性有訪問器。
給屬性賦值時使用訪問器set,set訪問器始終使用value設置屬性的值。獲取屬性值時使用訪問器get,get訪問器通過return返回屬性的值。在訪問聲明中,如果只有g(shù)et訪問器,表示是只讀屬性;如果只有set訪問器,表示是只寫屬性。
使用屬性:
class Window
{private double m width = 30;
public double width
{get
{ return m width;
}
set
{ m width = value;
}
}
static void Main(string[] args)
{Window y = new Window();
y.width=200;
Console("{0}",y.width);
}
}
(7)繼承
繼承是面向?qū)ο蟪绦蛟O計的一個重要特征,它允許在既有類的基礎上創(chuàng)建新類,新類從既有類中繼承成員,而且可以重新定義或加進新的成員,從而形成類的層次或等級。一般稱為繼承的類為基類或父類,而稱繼承后產(chǎn)生的類為子類。
C#繼承的重要性質(zhì):
1、C#只允許單繼承,即派生類只能有一個基類。
2、C#的繼承是可傳遞的,如果C從B派生,而B從A派生,那么C就會即繼承在B中聲明的成員,又繼承在A中聲明的成員;
3、派生類擴展它的直接基類,即派生類可以添加新的成員,但不能刪除從基類繼承的成員
4、構(gòu)造函數(shù)和析構(gòu)函數(shù)不能被繼承
5、派生類可以隱藏基類的成員,如果在派生類中聲明了與基類同名的新成員時,基類的該成員在派生類中就不能被訪問到。
派生類的聲明:
屬性類修飾符class類名:基類{類體}
在類聲明中,通過在類名的后面加上冒號和基類名表示繼承。
public class Employee:Person
{private string department;
private decimal salary;
public Employee(string n , int a ,long i ,string d,decimal s):base(n,a,i)
{department=d;
salary = s;
}
public override void Display()
{base.Display();
}
新類繼承了基類的成員name、age、ID,并添加了新的成員department和salary,重載了Display成員函數(shù),讓Display成員函數(shù)不但顯示員工的姓名、年齡和身份證號,而且顯示員工所屬的部門和薪水。
base關(guān)鍵字
base關(guān)鍵字用于從派生類中訪問基類的成員,它有兩種基本用法:
指定創(chuàng)建派生類實例時應調(diào)用的基類構(gòu)造函數(shù),用于調(diào)用基類的構(gòu)造函數(shù)完成對基類成員的初始化工作;
在派生類中訪問基類成員。
如上述例子在創(chuàng)建派生類Employee實例時,使用base調(diào)用其基類Person的構(gòu)造函數(shù);在派生類Employee的display方法中,使用了base關(guān)鍵字調(diào)用基類的Display方法。
后面的接口 、委托什么的感覺看起來好吃力,因為平時寫代碼用的也比較少,不能準確的理解其的意義。先擱置起來吧,接下來學習第二章。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站名稱:《C#:二維三維圖形繪制》閱讀記錄-創(chuàng)新互聯(lián)
鏈接URL:http://www.chinadenli.net/article38/dhsopp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、企業(yè)建站、建站公司、手機網(wǎng)站建設、移動網(wǎng)站建設、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)