c#中类的属性怎么理解?

 我来答
xiangjuan314
推荐于2018-04-15 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2765万
展开全部
属性是一种类的成员,实现类似函数,访问类似字段。作用是提供一种灵活和安全的机制来访问,修改私有字段。所以属性必须依赖于字段
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; }
吾即剑
2013-03-06 · TA获得超过228个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:94.9万
展开全部
比如:车子的属性——行驶,运载,等....就相当于一个事物的各项功能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kwchappy
2016-01-25 · TA获得超过775个赞
知道小有建树答主
回答量:504
采纳率:0%
帮助的人:309万
展开全部
1. 帮你找个,供你参考:http://www.jb51.net/article/48324.htm
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuanxun0403
2013-03-06 · TA获得超过101个赞
知道小有建树答主
回答量:279
采纳率:100%
帮助的人:120万
展开全部
-充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。
-设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。
-不能把属性作为引用类型或输出参数来进行传递。
-get方法没有参数;set方法有一个隐含的参数value。除了使用了abstract修饰符的抽象属性,每个访问器的执行体中只有分号“;”外,其他的所有属性的get访问器都通过return来读取属性的值,set访问器都通过value来设置属性的值。
-采用间接方式来访问对象的属性(间接调用get、set方法):对象.属性 = 值(调用set),变量 = 对象.属性(调用get)。
-在属性的访问声明中:
只有set访问器,表明该属性是只写的。
只有get访问器,表明该属性是只读的。
既有set访问器,又有get访问器,表明该属性是可读可写的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘_风
2013-03-06 · 超过25用户采纳过TA的回答
知道答主
回答量:151
采纳率:0%
帮助的人:56.6万
展开全部
赋值,取值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式