为什么C# 的字段一般设置为私有
5个回答
展开全部
设置为私有避免任意改变字段值。属性的作用是提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,使得数据在被轻松访问和读写的同时,能提供方法的安全性和灵活性。由于属性使用了get和set访问器,使它兼具有变量和方法的双重功能,调用它时若对它赋值则启动set子句,当变量用,调用它不赋值启动get子句,当方法用,使私有字段功能增加。
这一特性在数据库编程很有用,在Linq to SQL中,数据库表映射成实体类,表的列名映射为私有字段,它的值通过属性访问,AssociationAttribute类映射外键关系,引入LINQ查询后,由于微软的Linq库,会出现很多选项提示和出错提示,使编程轻松,而且无论怎样编写查询语句都不会改变数据库的值,除非提交更新插入删除命令。
这一特性在数据库编程很有用,在Linq to SQL中,数据库表映射成实体类,表的列名映射为私有字段,它的值通过属性访问,AssociationAttribute类映射外键关系,引入LINQ查询后,由于微软的Linq库,会出现很多选项提示和出错提示,使编程轻松,而且无论怎样编写查询语句都不会改变数据库的值,除非提交更新插入删除命令。
展开全部
属性里面有一个get{}控制读取, set{}控制写入 你可以把该字段的规则写到这里,比如长度和特殊字符的过滤啊,这样就保证了数据的安全性了,如果是建用户控件的话,那么属性在这里就带来很大的用处了,就现微软自带的一些控件直接写如属性:比如宽度 高度,哪些是自读的 哪些是可写入的,都要用属性来设置,这些功能用字段来实现的话就会很麻烦!所以到底是否是一样得你自己用了属性时候你就知道他们到底有啥区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
属性可以设置get,set.从而控制 只读or只写or读写..
或许你会说,那我直接用常量以及变量控制就行了呀.为什么要这么麻烦...
因为属性不止控制 可读,可写. 对代码更是进行封装.保护
而当使用Get时.使用者得到的是结果,而运算过程(算法)是被封装起来..
例如:
private int second = 300;
public int Minute{
get{ return second / 60};
}
当使用者使用Minute去获得 分钟 时,他并不知道返回值是如何计算出来的.并且也不知道有个second的字段,他只需要知道有一个这样的接口供使用者使用...
或许你会说,那我直接用常量以及变量控制就行了呀.为什么要这么麻烦...
因为属性不止控制 可读,可写. 对代码更是进行封装.保护
而当使用Get时.使用者得到的是结果,而运算过程(算法)是被封装起来..
例如:
private int second = 300;
public int Minute{
get{ return second / 60};
}
当使用者使用Minute去获得 分钟 时,他并不知道返回值是如何计算出来的.并且也不知道有个second的字段,他只需要知道有一个这样的接口供使用者使用...
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-03-30
展开全部
先着重了解一下面向对象的概念。
简单说,就是把一个问题中所涉及的模型划分为各个对象,每个对象用于保存自身的状态,并提供修改、查询状态的接口。
例如,对于一个气球对象,它内部保存的气体我们不必关心,但是我们可以对气球进行充气、放气的操作,还可以测量气球的直径等等。这样就是把一个模型的状态保存与它的状态转化严格分离开。
对于C#,一般情况下不应该暴露用于保存状态的成员。
所以如果想要查询某一状态,就需要定义一个公有成员属性来完成。
C#编程在习惯上用于公有的有函数、属性和事件,建议命名时以大写开头,单词首字母大写、不要包含下划线。这三种成员一般会是用于和其他对象交互的接口。
定义属性来访问字段有些啰嗦,所以.NET提供了一个“语法糖”,定义类时:
public T PropertyName
{
get; set;
}
编译器会在内部提供一个私有量用于储存数据,可以用来取代:
public T PropertyName
{
get{ return _MemberName; }
set{ _MemberName = value; }
}
private T _MemberName;
如果想要模拟只读效果的话,可以写:
public T PropertyName
{
get;
private set;
}
简单说,就是把一个问题中所涉及的模型划分为各个对象,每个对象用于保存自身的状态,并提供修改、查询状态的接口。
例如,对于一个气球对象,它内部保存的气体我们不必关心,但是我们可以对气球进行充气、放气的操作,还可以测量气球的直径等等。这样就是把一个模型的状态保存与它的状态转化严格分离开。
对于C#,一般情况下不应该暴露用于保存状态的成员。
所以如果想要查询某一状态,就需要定义一个公有成员属性来完成。
C#编程在习惯上用于公有的有函数、属性和事件,建议命名时以大写开头,单词首字母大写、不要包含下划线。这三种成员一般会是用于和其他对象交互的接口。
定义属性来访问字段有些啰嗦,所以.NET提供了一个“语法糖”,定义类时:
public T PropertyName
{
get; set;
}
编译器会在内部提供一个私有量用于储存数据,可以用来取代:
public T PropertyName
{
get{ return _MemberName; }
set{ _MemberName = value; }
}
private T _MemberName;
如果想要模拟只读效果的话,可以写:
public T PropertyName
{
get;
private set;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
外部看到的只是一个属性接口
他是无法看到类的内部的。
封装性
有事HI我:)
他是无法看到类的内部的。
封装性
有事HI我:)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询