C#類中的屬性應用總結(詳解類的屬性)。本站提示廣大學習愛好者:(C#類中的屬性應用總結(詳解類的屬性))文章只能為提供參考,不一定能成為您想要的結果。以下是C#類中的屬性應用總結(詳解類的屬性)正文
private int dd;
public int dd
{
get{ return xx*3;}
set{ xx = value/3;}
}
沒有set的屬性是一種只讀屬性,沒有get的拜訪器是一種只寫屬性。
(1) get拜訪器用來前往字段或許盤算 並前往字段,它必需以return或許throw終結。
private string name;
public string Name
{
get
{
return name != null ? name : "NA";
}
}
(2) set拜訪器相似前往類型為void的函數,應用value的隱式參數
private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
set
{
name = value;
}
}
(3) 拜訪器的限制
屬性拜訪標志可認為public,private,protected,internal,protected internal,由於拜訪器的拜訪限制必需比屬性的拜訪限制加倍嚴厲,所以
private int xx;
public int sxx
{
public get { return xx; }//error
set { xx = value; }
}
不克不及對接口或許顯式的接口應用拜訪潤飾符,由於接口裡外面一切的默許是public的;
同時具有get,set拜訪器時,才許可應用拜訪潤飾符,而且只能有一個應用;
假如屬性有override潤飾的時刻,拜訪器潤飾符必需與被重寫的婚配。
拜訪器的可拜訪級別必需比屬性的可拜訪級別加倍嚴厲
懂得:
起首第四條最輕易想到,也是很公道的,究竟是核心的決議外部的。
其次,既然第四條可以懂得,那末假如只要一個拜訪器的時刻,拜訪器拜訪級別同等屬性,假如這個時刻再去指 定加倍嚴厲的拜訪級別,那末為什麼欠妥初在屬性上指定呢?
這層次解了,那末為何必需同時具有get,set能力添加拜訪潤飾符就加倍明白了。
推理:
接口中屬性是public的,那末假如接口中只要一個get或許set的時刻,我們可以在繼續中指明另外一個拜訪器的屬 性。然則假如接口中同時具有get,set,那末依照派生和繼續的婚配性,這時候候就不克不及如許再指定拜訪器的拜訪限制了。
public interface ISomeInterface
{
int TestProperty
{
// No access modifier allowed here
// because this is an interface.
get;
}
}
public class TestClass : ISomeInterface
{
public int TestProperty
{
// Cannot use access modifier here because
// this is an interface implementation.
get { return 10; }
// Interface property does not have set accessor,
// so access modifier is allowed.
protected set { }
}
}
(4)可以用static 潤飾屬性,以便隨時拜訪
private static int counter;
public static int Counter
{
get { return counter; }
}
(5)屬性隱蔽
public class Employee
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
public class Manager : Employee
{
private string name;
// Notice the use of the new modifier:
public new string Name // use new to hide property in base class
{
get { return name; }
set { name = value + ", Manager"; }
}
}
(6)virtual來潤飾屬性,派生類應用override來重寫屬性
public class Parent
{
public virtual int TestProperty
{
protected set { }
get { return 0; }
}
}
public class Kid : Parent
{
public override int TestProperty
{
protected set { }
get { return 0; }
}
}
(7) abstract 潤飾屬性,派生類來完成屬性
abstract class Shape
{
public abstract double Area
{
get;
set;
}
}
class Square : Shape
{
public double side;
public override double Area
{
get
{
return side * side;
}
set
{
side = System.Math.Sqrt(value);
}
}
}
(8)sealed 潤飾屬性,派生類不克不及修正屬性
(9)接口屬性
接口屬性不具有函數體
public interface Inters
{
string Name
{
get;
set;
}
}
(10) 主動屬性
當屬性拜訪器中不須要其他拜訪邏輯時刻,便可以應用主動屬性,使代碼加倍簡練
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerID { get; set; }