C#物件導向進階文法(二)

來源:互聯網
上載者:User
類的轉換
  1. is運算子

using System;
classClass1

{

}

class Class2

{

}

class IsTest

{

static void Test(Object o)

{

Class1 a;

Class2 b;

if (o is Class1)

{

Console.WriteLine("o is Class1");

a = (Class1)o;// do something for a

}

else if (o is Class2)

{

Console.WriteLine("o is Class2");

b = (Class2)o;// do something for b

}

else

{

Console.WriteLine("o is neither Class1 nor Class2");

}

}

static void Main(string[] args)

{

Class1 c1 = new Class1();

Class2 c2 = new Class2();

Test(c1);

Test(c2);

Test("a string");

// output:

// o is Class1

// o is Class2

// o is neither Class1 nor Class2

}

}

 

  1. as運算子

using System;

class AsTest

{

static void Main(string[] args)

{

object[] os = { "a", "b", 1, 2, 3 };

foreach (object o in os)

{

String s = o as string;

if (s != null)

{

Console.WriteLine(s);

}

}

// output:

// a

// b

}

}

 

結構

枚舉和結構是兩種進階的實值型別。

結構與類很相似,是一種可以包含資料成員和函數的資料結構。但是與類不同,結構是一種實值型別,為結構分配資料時不需要從託管堆中分配記憶體,從棧中分配。結構類型的變數直接包含了改結構的資料,而類類型的變數所包含的只是對象的一個引用。

  1. 結構

在C#中用關鍵字struct來聲明結構,聲明形式如下:

[特性]

[結構修飾符] struct 結構名:[基底介面列表]

{

    [結構體]

}[;]

其中,特性是對結構特性的描述,是可選的。結構修飾符也是可選的,可以使用的修飾符與類修飾符完全相同。關鍵字struct和結構名是必需的。結構可以實現一個或多個介面,也是可選的;結構體(定義結構的代碼塊)是必需的,結構體的程式碼封裝括在一對大括弧之間,結構體也可以為空白。最後還可以添加一個分號,也是可選的。

    結構都是從System.ValueType繼承而來的,因此結構中都包含從類型System.ValueType繼承而來的成員。與類一樣,結構中可以包括資料成員(常量和欄位)和函數成員(建構函式、屬性、方法、索引器、介面、委託和事件)。

Demo.cs

using System;

using System.Collections.Generic;

struct Student

{

private int math;

public int Math

{

get { return math; }

set { math = value; }

}

public int Chinese;

public int English;

// student's name

private string name;

public string Name

{

get { return name; }

set { name = value; }

}

 

//constructor

public Student(int math, int chinese, int english, string name)

{

this.math = math;

this.Chinese = chinese;

this.English = english;

this.name = name;

}

public double Average()

{

int sum = this.math + this.Chinese + this.English;

return sum / 3.0;

}

}

 

class StudentStructTest

{

static void Main(string[] args)

{

Student tom = new Student(80, 90, 85, "Tom");

double average = tom.Average();

Console.WriteLine("Average grade is {0}", average);

}

}

 

枚舉

枚舉類型(Enum Type)是一種特殊的實值型別,用於聲明一組命名的常量。使用枚舉類型增加了程式的可讀性和可維護性。這與使用常量來代替文本或數位意思是相似的,另外,枚舉是強型別的,可以避免類型錯誤。

枚舉使用關鍵字enum來聲明,形式如下:

[枚舉修飾符] enum 枚舉名

{

    [枚舉成員名]=[常量運算式]

}[;]

例如:

enum Week

{

Monday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday,

Sunday

}

 

枚舉類型可以顯式地聲明byte、sbyte、short、ushort、int、uint、long、ulong類型作為對應的基礎類型,預設的枚舉聲明意味著對應的基礎類型是int

  • 如果枚舉成員是在枚舉類型中聲明的第一個枚舉成員,則它的值為0
  • 否則,美劇成員的關聯值是通過將前一個枚舉成員的值加1得到的。這樣增加後的值必須在該基礎類型的可表示範圍內,否則會出現編譯時間錯誤。

例如:

enum Values

{

value1,

value2,

value3 = 30,

value4

}

其中,value1=0,value2=0,value3=30,value4=31。

把枚舉轉化成對應的基礎類型需要做類型轉換:

  • int a = (int)Week.Friday;
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.