c#類成員
◆常量 與類關(guān)聯(lián)的常量值
◆字段 類的變量
◆方法 類可執(zhí)行的計算和操作
◆屬性 與讀寫類的命名屬性相關(guān)聯(lián)的操作
◆索引器 與以數(shù)組方式索引類的實例相關(guān)聯(lián)的操作
◆事件 可由類生成的通知
◆運算符 類所支持的轉(zhuǎn)換和表達式運算符
◆構(gòu)造函數(shù) 初始化類的實例或類本身所需的操作
◆析構(gòu)函數(shù) 在永久丟棄類的實例之前執(zhí)行的操作
◆類型 類所聲明的嵌套類型
字段
什么是字段
◆字段field是一種表示與對象或類型(類與結(jié)構(gòu)體)關(guān)聯(lián)的變量
◆字段是類型的成員宰僧,舊稱“成員變量”
◆與對象關(guān)聯(lián)的字段亦稱為“實例字段”
◆與類型關(guān)聯(lián)的字段稱為“靜態(tài)字段”,由static修飾。
字段的聲明
◆盡管字段聲明帶有分號但它不是語句
◆字段的名字一定是名詞
字段的初始化
◆無顯式初始化時琴儿,字段獲得其類型的默認值段化,所以字段永遠不會未被初始化。
◆實例字段初始化的時機是在對象創(chuàng)建時
◆靜態(tài)字段初始化的時機是在類型被加載load時
只讀字段
◆實例只讀字段
◆靜態(tài)只讀字段
using System;
using System.Collections.Generic;
namespace Test
{
class User
{
//只讀實例字段
public readonly int ID;
//實例字段
public int Age;
public int Score;
//靜態(tài)字段
public static int AverageAge;
public static int AverageScore;
public static int Amount;
//構(gòu)造函數(shù)
public User(int id)
{
this.ID = id;//只讀字段只能在實例化時初始化造成,且不能賦值显熏。
User.Amount++;
}
//靜態(tài)方法
public static void ReportAmount()
{
Console.WriteLine(User.Amount);
}
public static void ReportAge()
{
Console.WriteLine(User.AverageAge);
}
public static void ReportScore()
{
Console.WriteLine(User.AverageScore);
}
}
class Program
{
static void Main(string[] args)
{
List<User> userlist = new List<User>();
for(int i=0; i<100; i++)
{
User user = new User(i);
user.Age = i;
user.Score = i;
userlist.Add(user);
}
int totalAge = 0;
int totalScore = 0;
foreach(var user in userlist)
{
totalAge += user.Age;
totalScore += user.Score;
}
User.AverageAge = totalAge / User.Amount;
User.AverageScore = totalScore / User.Amount;
//靜態(tài)變量
User.ReportAmount();
User.ReportAge();
User.ReportScore();
Console.ReadKey();
}
}
}
屬性
什么是屬性
◆屬性property是一種用于訪問對象或類型的特征的成員,特征反映了狀態(tài)晒屎。
◆屬性是字段的自然擴展
從命名上看field字段更加偏向于實例對象在內(nèi)存中的布局喘蟆,property屬性更加偏向于反映現(xiàn)實世界對象的特征。
屬性對外暴露數(shù)據(jù)鼓鲁,數(shù)據(jù)可以是存儲在字段里的蕴轨,也可以是動態(tài)計算出來的。
屬性對內(nèi)則保護字段不被非法值污染
◆屬性由get和set方法進化而來
屬性的聲明
◆屬性完整的聲明 - 后臺成員變量與訪問器
◆屬性簡略聲明 - 只有訪問器
◆動態(tài)計算值的屬性
◆注意實例屬性和靜態(tài)屬性
◆屬性的名字一定是名詞
◆只讀屬性即只有g(shù)etter而沒有setter方法
盡管語法上正確骇吭,幾乎沒有人使用只寫屬性橙弱,因為屬性的主要目的是通過向外暴露數(shù)據(jù)而表示對象或類型的狀態(tài)。
VS2017中書寫屬性的燥狰,類中鍵入propfull后連續(xù)按兩下Tab鍵棘脐,即可快速書寫setter和getter方法。
屬性與字段的關(guān)系
一般情況下龙致,屬性和字段都用于表示實體(對象或類型)的狀態(tài)
屬性大多數(shù)情況下是字段的包裝器wrapper
建議永遠使用屬性而非字段來暴露數(shù)據(jù)蛀缝,即字段永遠都是private或protected的。
using System;
namespace Test
{
class User
{
//屬性
private int age;
public int Age {
get
{
return this.age;
}
set
{
if (value >= 0 && value <= 120)
{
this.age = value;
}
else
{
throw new Exception("Age value has error");
}
}
}
}
class Program
{
static void Main(string[] args)
{
try
{
User user1 = new User();
user1.Age = 20;
User user2 = new User();
user2.Age = 200;
int avgAge = (user1.Age + user2.Age) / 2;
Console.WriteLine(avgAge);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
}
索引器
什么是索引器
索引器(indexer)是一種成員:使對象能夠用與數(shù)組相同的方式即是用下標(biāo)進行索引
索引器的聲明
注意:沒有靜態(tài)索引器
常量
什么是常量
常量constant是表示常量值目代,即可以在編譯時計算的值的類成員内斯。
常量隸屬于類型而非對象,即沒有實例常量像啼。實例常量的角色由只讀實例來擔(dān)當(dāng)俘闯。
注意區(qū)分成員常量與局部常量
常量的聲明
各種只讀的應(yīng)用場景
為了提高程序可讀性和執(zhí)行效率 - 常量
為了防止對象的值被改變 - 只讀字段
向外暴露不允許修改的數(shù)據(jù) - 只讀屬性(靜態(tài)或非靜態(tài)),功能與常量有些重疊忽冻。
當(dāng)希望成為常量的值其類型不能被常量聲明接受時(類或自定義結(jié)構(gòu)體) - 靜態(tài)只讀字段
C#語言入門詳解(017) 字段真朗、屬性、索引器僧诚、常量:https://www.bilibili.com/video/av18906269?t=4734
https://www.cnblogs.com/tangbuchi/p/10105669.html
C#類成員:http://www.reibang.com/p/a88dce067fa3