目錄
創(chuàng)新互聯(lián)建站公司2013年成立,先為墨玉等服務(wù)建站,墨玉等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為墨玉企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。學(xué)習(xí)目標(biāo):
學(xué)習(xí)內(nèi)容:
學(xué)習(xí)時(shí)間:
學(xué)習(xí)產(chǎn)出:
C#枚舉
C#結(jié)構(gòu)體
C#類
構(gòu)造函數(shù):
類的靜態(tài)(static)成員:
C#繼承
C#多態(tài)
靜態(tài)多態(tài)性:
動(dòng)態(tài)多態(tài)性:
總結(jié):
枚舉(Enum)是命名整型常量,值類型,不可以繼承
enum{
enumeration list
};
//enum_name 指定枚舉的類型名稱。
//enumeration list 是一個(gè)用逗號(hào)分隔的標(biāo)識(shí)符列表。
//枚舉列表中的每個(gè)符號(hào)代表一個(gè)整數(shù)值,一個(gè)比它前面的符號(hào)大的整數(shù)值。默認(rèn)情況下,第一個(gè)枚舉符號(hào)的值是 0,enum里的值是遞增的,可以定義枚舉的值
案例:
public class EnumTest
{
enum Day { Sun=1, Mon, Tue, Wed, Thu, Fri, Sat };
static void Main()
{
int x = (int)Day.Sun;
int y = (int)Day.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
}
//"Sun = 1"
//"Fri = 6"
//要注意的是:enum只能在同類內(nèi)使用
結(jié)構(gòu)體:使一個(gè)單一變量可以存儲(chǔ)各種數(shù)據(jù)類型的相關(guān)數(shù)據(jù),結(jié)構(gòu)體不可以賦初值。和類同級(jí)
特點(diǎn):
- 結(jié)構(gòu)可帶有方法、字段、索引、屬性、運(yùn)算符方法和事件。
- 結(jié)構(gòu)可定義構(gòu)造函數(shù),但不能定義析構(gòu)函數(shù)。但是,您不能為結(jié)構(gòu)定義無參構(gòu)造函數(shù)。無參構(gòu)造函數(shù)(默認(rèn))是自動(dòng)定義的,且不能被改變。
- 與類不同,結(jié)構(gòu)不能繼承其他的結(jié)構(gòu)或類。
- 結(jié)構(gòu)不能作為其他結(jié)構(gòu)或類的基礎(chǔ)結(jié)構(gòu)。
- 結(jié)構(gòu)可實(shí)現(xiàn)一個(gè)或多個(gè)接口。
- 結(jié)構(gòu)成員不能指定為 abstract、virtual 或 protected。
- 當(dāng)您使用?New?操作符創(chuàng)建一個(gè)結(jié)構(gòu)對(duì)象時(shí),會(huì)調(diào)用適當(dāng)?shù)臉?gòu)造函數(shù)來創(chuàng)建結(jié)構(gòu)。與類不同,結(jié)構(gòu)可以不使用 New 操作符即可被實(shí)例化。
- 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被賦值,對(duì)象才被使用。
struct Books
{
private string title;
private string author;
private string subject;
private int bookId;
public void setValues(string t,string a,string s,int id)
{
title = t;
author = a;
subject = s;
bookId = id;
}
public void display()
{
Console.WriteLine("Title : {0}", title);
Console.WriteLine("Author : {0}", author);
Console.WriteLine("Subject : {0}", subject);
Console.WriteLine("Book_id :{0}", bookId);
}
}
class Program
{
static void Main(string[] args)
{
#region struct結(jié)構(gòu)體
Books book1 = new Books();
Books book2 = new Books();
book1.setValues("11", "222", "3333", 44444);
book2.setValues("22", "333", "4444", 55555);
book1.display();
book2.display();
#endregion
}
}
- 類定義了類的對(duì)象由什么組成及在這個(gè)對(duì)象上可執(zhí)行什么操作。
- 對(duì)象是類的實(shí)例。構(gòu)成類的方法和變量稱為類的成員。
- 我們定義一個(gè)類后,就必須實(shí)例化才給使用。實(shí)例化就是創(chuàng)建一個(gè)對(duì)象的過程
- A a = new B(); 其中A是申明類,B是實(shí)例類。
成員變量是對(duì)象的屬性(從設(shè)計(jì)角度),且它們保持私有來實(shí)現(xiàn)封裝。這些變量只能使用公共成員函數(shù)來訪問。
案例:
class Box
{
private double length; // 長度
private double breadth; // 寬度
private double height; // 高度
public void setLength( double len )
{
length = len;
}
public void setBreadth( double bre )
{
breadth = bre;
}
public void setHeight( double hei )
{
height = hei;
}
public double getVolume()
{
return length * breadth * height;
}
}
class Boxtester
{
static void Main(string[] args)
{
Box Box1 = new Box(); // 聲明 Box1,類型為 Box
Box Box2 = new Box(); // 聲明 Box2,類型為 Box
double volume; // 體積
// Box1 詳述
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// Box2 詳述
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// Box1 的體積
volume = Box1.getVolume();
Console.WriteLine("Box1 的體積: {0}" ,volume);
// Box2 的體積
volume = Box2.getVolume();
Console.WriteLine("Box2 的體積: {0}", volume);
Console.ReadKey();
}
}
構(gòu)造函數(shù):類的一個(gè)特殊的成員函數(shù),當(dāng)創(chuàng)建類的新對(duì)象時(shí)執(zhí)行。構(gòu)造函數(shù)的名稱與類的名稱完全相同,它沒有任何返回類型。
構(gòu)造函數(shù)的作用:
C#構(gòu)造函數(shù)(超詳解,建議收藏!!!)_Just Do Its的博客-博客_c#構(gòu)造函數(shù)
當(dāng)需要給一個(gè)類中的字段進(jìn)行初始化時(shí)。第一種:實(shí)例化后手動(dòng)給屬性賦值;第二種實(shí)例化時(shí)直接把參數(shù)放進(jìn)去自動(dòng)給屬性賦值
//無參構(gòu)造函數(shù)
class Line
{
private double length; // 線條的長度
//在創(chuàng)建對(duì)象時(shí)就調(diào)用
public Line()
{
Console.WriteLine("對(duì)象已創(chuàng)建");
}
//get,set函數(shù),我的理解是,一個(gè)是從成員變量拿到函數(shù)中,一個(gè)從成員函數(shù)拿到數(shù)據(jù),有一個(gè)通向外面的接口
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
static void Main(string[] args)
{
Line line = new Line();
// 設(shè)置線條長度
line.setLength(6.0);
Console.WriteLine("線條的長度: {0}", line.getLength());
Console.ReadKey();
}
}
//有參構(gòu)造函數(shù),在創(chuàng)建對(duì)象的同時(shí)給對(duì)象賦初始值
class Line
{
private double length; // 線條的長度
public Line(double len) // 參數(shù)化構(gòu)造函數(shù)
{
Console.WriteLine("對(duì)象已創(chuàng)建,length = {0}", len);
length = len;
}
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
static void Main(string[] args)
{
Line line = new Line(10.0);
Console.WriteLine("線條的長度: {0}", line.getLength());
// 設(shè)置線條長度
line.setLength(6.0);
Console.WriteLine("線條的長度: {0}", line.getLength());
Console.ReadKey();
}
}
在這插一下話,我感覺菜鳥教程很多都沒有講清楚,要不是我之前學(xué)過其他語言,多少有點(diǎn)領(lǐng)悟,說實(shí)在的真看不懂,在此貼一個(gè)截圖,就是很基礎(chǔ)的東西,但是教程直接告訴你就這么寫,不會(huì)告訴為什么這么寫。這段話真的是深入內(nèi)心了已經(jīng)是,恍然大悟(說明之前學(xué)的也不好)。然后我往后翻了一下,下面的教程其實(shí)也有關(guān)于屬性的,但就是講的太晚了,懵懵懂懂學(xué)到那有啥用。來自C#的類(史上最全總結(jié))-不死鳥JGChttps://blog.csdn.net/jiangguangchao/article/details/108996447?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166979052216782429732105%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166979052216782429732105&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-108996447-null-null.142%5Ev67%5Econtrol,201%5Ev3%5Eadd_ask,213%5Ev2%5Et3_control1&utm_term=C%23%E7%B1%BB&spm=1018.2226.3001.4187
析構(gòu)函數(shù):是類的一個(gè)特殊的成員函數(shù),當(dāng)類的對(duì)象超出范圍時(shí)執(zhí)行(程序認(rèn)為可以垃圾回收的時(shí)候才會(huì)有用,反正我試了很多次都不成功,還以為是我的問題呢,結(jié)果上網(wǎng)一搜,純粹是看C#“心情”哈哈哈哈)
class Line{
~Line() //析構(gòu)函數(shù)
{
Console.WriteLine("對(duì)象已刪除");
}
}
類的靜態(tài)(static)成員:靜態(tài)變量用于定義常量,因?yàn)樗鼈兊闹悼梢酝ㄟ^直接調(diào)用類而不需要?jiǎng)?chuàng)建類的實(shí)例來獲取。靜態(tài)函數(shù),這樣的函數(shù)只能訪問靜態(tài)變量。
class StaticVar
{
public static int num;
//count函數(shù)被調(diào)用幾次,num值就+幾次
public void count()
{
num++;
}
public static int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s = new StaticVar();
s.count();
s.count();
s.count();
//靜態(tài)方法不用實(shí)例化
Console.WriteLine("變量 num: {0}", StaticVar.getNum());
Console.ReadKey();
}
}
在菜鳥教程看到的筆記,最后一個(gè),截個(gè)圖C# 類(Class) | 菜鳥教程? 。我覺得這才是靜態(tài)方法的意義
1、使用 static 關(guān)鍵字修飾的類、字段、屬性、方法等;
2、靜態(tài)類只能包含靜態(tài)成員;
3、靜態(tài)成員可以使用類來訪問;
這應(yīng)該還有其他知識(shí)點(diǎn),留位置:比如this什么的?
基類和派生類
<訪問修飾符>class<基類>{
...
}
class<派生類>:<基類>{
...
}
案例:
class Rectangle
{
// 成員變量
protected double length;
protected double width;
public Rectangle(double l, double w)
{
length = l;
width = w;
}
public double getArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("長度: {0}", length);
Console.WriteLine("寬度: {0}", width);
Console.WriteLine("面積: {0}", GetArea());
}
}//end class Rectangle
class Tabletop : Rectangle
{
private double cost;
//子類繼承父類時(shí)必須構(gòu)造函數(shù),并且?guī)в邢嗤男螀?,并且后面要[ :base(參數(shù)) ]
public Tabletop(double l, double w) : base(l, w)
{ }
public double getCost()
{
cost = getArea() * 70;
return cost;
}
public void Display()
{
base.Display();
Console.WriteLine("成本: {0}", getCost());
}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Tabletop t = new Tabletop(4.5, 7.5);
t.Display();
Console.ReadLine();
}
}
子類繼承父類時(shí)必須構(gòu)造函數(shù),并且?guī)в邢嗤男螀ⅲ⑶液竺嬉覽 :base(參數(shù)) ]?。C#中的繼承(詳解)_木偶?的博客-博客_c#繼承?這個(gè)博客里有很詳細(xì)的講了base的關(guān)鍵字,不然還真不知道這個(gè)關(guān)鍵字干嘛的。
使用接口實(shí)現(xiàn)多重繼承:菜鳥里有,案例中除了多了一個(gè)接口其他沒變化,就只截個(gè)圖記錄一下。接口之后會(huì)學(xué)到。地址預(yù)留
靜態(tài)多態(tài)性:
- 多態(tài)就是同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作
- 在靜態(tài)多態(tài)性中,函數(shù)的響應(yīng)是在編譯時(shí)發(fā)生的。在動(dòng)態(tài)多態(tài)性中,函數(shù)的響應(yīng)是在運(yùn)行時(shí)發(fā)生的。
- 同一個(gè)事件發(fā)生在不同的對(duì)象上會(huì)產(chǎn)生不同的結(jié)果
函數(shù)重載:
兩個(gè)重載函數(shù)必須在下列一個(gè)或兩個(gè)方面有所區(qū)別:
本來我還是很懵逼的,然后看到了例子和重載的定義,我悟了大師,F(xiàn)12點(diǎn)開n那些關(guān)鍵字啥的不都是這個(gè)東西嗎。
比如string字符串的方法中就有:
public int CompareTo(object? value);
public int CompareTo(String? strB);
這兩個(gè)函數(shù),功能都是一樣的,返回值也一樣,但是參數(shù)類型就是不一樣啊。這就是多態(tài)性,重載的表現(xiàn)。
public class TestData
{
public int Add(int a, int b, int c)
{
return a + b + c;
}
public int Add(int a, int b)
{
return a + b;
}
}
class Program
{
static void Main(string[] args)
{
TestData dataClass = new TestData();
int add1 = dataClass.Add(1, 2);
int add2 = dataClass.Add(1, 2, 3);
Console.WriteLine("add1 :" + add1);
Console.WriteLine("add2 :" + add2);
}
}
運(yùn)算符重載:
重定義或重載 C# 中內(nèi)置的運(yùn)算符。因此,程序員也可以使用用戶自定義類型的運(yùn)算符。重載運(yùn)算符是具有特殊名稱的函數(shù),是通過關(guān)鍵字?operator?后跟運(yùn)算符的符號(hào)來定義的。有返回類型和參數(shù)列表。
class Box
{
private double length;
private double breadth;
private double height;
public double getVolume()
{
return length * breadth * height;
}
public void setLength(double len)
{
length = len;
}
public void setBreadth(double bre)
{
breadth = bre;
}
public void setHeight(double hei)
{
height = hei;
}
//為Box類重載“+”運(yùn)算符,其他不影響
public static Box operator +(Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
}
class Program
{
static void Main(string[] args)
{
#region 運(yùn)算符重載
Box box1 = new Box();
Box box2 = new Box();
Box box3 = new Box();
double volume = 0.0;
box1.setLength(6.0);
box1.setHeight(7.0);
box1.setBreadth(5.0);
box2.setLength(12.0);
box2.setHeight(13.0);
box2.setBreadth(15.0);
volume = box1.getVolume();
Console.WriteLine("box1 的體積: {0}", volume);
volume = box2.getVolume();
Console.WriteLine("box2 的體積: {0}", volume);
//運(yùn)算符重載的方法,+號(hào)代表重載過的方法
box3 = box1 + box2;
volume = box3.getVolume();
Console.WriteLine("box3 的體積: {0}", volume);
}
}
可重載和不可重載的運(yùn)算符:
C# 運(yùn)算符重載 | 菜鳥教程
動(dòng)態(tài)多態(tài)性:動(dòng)態(tài)多態(tài)性是通過?抽象類?和?虛方法?實(shí)現(xiàn)的。
- 抽象類(abstract):抽象方法,在父類中的空方法,表示父類有這個(gè)功能,子類繼承的話也會(huì)有,比如子類繼承父類的唱歌方法,但是子類唱哪種風(fēng)格的歌就和父類沒啥關(guān)系了,反正都是會(huì)唱歌。
- 如果一個(gè)類中包含有抽象方法,那么這個(gè)類一定要聲明為抽象類。
- 同時(shí),抽象方法一定需要在子類中重寫。(因?yàn)闆]實(shí)現(xiàn))
- 抽象類不能(直接)實(shí)例化(繼承的子類可以實(shí)例化)。
- 通過在類定義前面放置關(guān)鍵字?sealed,可以將類聲明為密封類。當(dāng)一個(gè)類被聲明為?sealed?時(shí),它不能被繼承。抽象類不能被聲明為 sealed
- 虛方法(
virtual
):父類中可以被子類繼承重寫的方法。(也可以不重寫,因?yàn)樘摲椒ㄊ窃诟割愔芯鸵呀?jīng)實(shí)現(xiàn)了的)。對(duì)虛方法的調(diào)用是在運(yùn)行時(shí)發(fā)生的,所以每次調(diào)用重寫虛方法的子方法時(shí),虛方法也會(huì)被調(diào)用。- 繼承子類中的重寫虛函數(shù)需要聲明關(guān)鍵字 override,在方法參數(shù)傳入中寫(類名 形參名)例如 public void CallArea(Shape sh),意思是傳入一個(gè) shape 類型的類
C#中虛方法(virtual)詳解_木偶?的博客-博客_c# virtual
using System;
using System.Collections.Generic;
public class Shape
{
//屬性
public int X { get; private set; }
public int Y { get; private set; }
public int Height { get; set; }
public int Width { get; set; }
// 虛方法
public virtual void Draw()
{
Console.WriteLine("執(zhí)行基類的畫圖任務(wù)");
}
}
//下面三個(gè)是重寫父類虛方法的方法
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("畫一個(gè)圓形");
base.Draw();
}
}
class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("畫一個(gè)長方形");
base.Draw();
}
}
class Triangle : Shape
{
public override void Draw()
{
Console.WriteLine("畫一個(gè)三角形");
base.Draw();
}
}
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建一個(gè) List對(duì)象,并向該對(duì)象添加 Circle、Triangle 和 Rectangle
var shapes = new List{
new Rectangle(),
new Triangle(),
new Circle()
};
// 使用 foreach 循環(huán)對(duì)該列表的派生類進(jìn)行循環(huán)訪問,并對(duì)其中的每個(gè) Shape 對(duì)象調(diào)用 Draw 方法
foreach (var shape in shapes)
{
shape.Draw();
}
Console.WriteLine("按下任意鍵退出。");
Console.ReadKey();
}
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧