关于C#的属性问题
今天才发现,原来函数也可以这么写(我一直以为只用在接口中)publicstringFirstName{get;set;}publicstringLastName{get;...
今天才发现,原来函数也可以这么写(我一直以为只用在接口中)
public string FirstName{ get; set; }
public string LastName { get; set; }
因为我以为GET,和SET为空的话就只能用于接口。
但实际在类中使用很爽,然后就有疑问了,既然可以这么用那为什么还要采用这种
string mFirstName;
string mLastName;
public string FirstName
{ get { return mFirstName; } set { mFirstName = value; } }
public string LastName
{ get { return mLastName; } set { mLastName = value; } }
难道仅仅是因为这样使用时能在get和set里面做更多的事吗?
那如果这样的话假设下面还有一个函数
public string GetString()
{
return this.FirstName; //此处使用this.FirstName,还是this.mFirstName?
}
还有,正常情况下这几个地方应该怎么命名
public class A
{
string name;//1
public string Name //2
{get{return name;}set{name=value;}}
public void test()
{
string name=string.empty;//3
}
}
3个地方分别是怎么命名(规范,不是个人习惯)?_name,Name,name,mName,mname? 展开
public string FirstName{ get; set; }
public string LastName { get; set; }
因为我以为GET,和SET为空的话就只能用于接口。
但实际在类中使用很爽,然后就有疑问了,既然可以这么用那为什么还要采用这种
string mFirstName;
string mLastName;
public string FirstName
{ get { return mFirstName; } set { mFirstName = value; } }
public string LastName
{ get { return mLastName; } set { mLastName = value; } }
难道仅仅是因为这样使用时能在get和set里面做更多的事吗?
那如果这样的话假设下面还有一个函数
public string GetString()
{
return this.FirstName; //此处使用this.FirstName,还是this.mFirstName?
}
还有,正常情况下这几个地方应该怎么命名
public class A
{
string name;//1
public string Name //2
{get{return name;}set{name=value;}}
public void test()
{
string name=string.empty;//3
}
}
3个地方分别是怎么命名(规范,不是个人习惯)?_name,Name,name,mName,mname? 展开
展开全部
public string FirstName{ get; set; } 这种方法是在.net 3以后支持的,简化了属性的写法。推荐用这种方法。
我们看这个
public string FirstName
{
get { return mFirstName; } //这个是当获取时,返回的值,比如 A.FirstName 获取到mFirstName
set { mFirstName = value; } //这个是设置时,如A.FirstName=1时赋值给mFirstName
}
在早期版本中,通常将属性和私有变量分开来写,这样就相当于一个访问器,就是外问设置和访问的时候用FirstName,内部使用的时候用私有的mFirstName。
当然,用get和set的理由不仅在于此,而在于当请求或返回的值并不是该字段或者需要进行其它处理时,比如
public int A{set { a+=value;} //我们设置XX.A时,实际上是对A的值进行增加。这就是可以在get或者set 的时候,进行一些运算或者直接写方法也可以。也可以用get和set控制访问器,就是只允许设置或者只允许读取这样。
所以,当你的属性字段和私有字段相同,且在设置或获取时不进行处理时,直接用 {get;set;}即可,但要是其它时候,则使用另外一种方法。
return this.FirstName; //这个当然是this.FirstName。
关于命名规范,也没有什么标准,一般是公用和私有共存的情况私有的用下划线开始,如
private string _name;
publist string name{get;set;}
至于大小写,一般习惯是除首字母外单词首字母大写或单词首字母大写,看个人习惯。如
firstName
FirstName
不过我个人习惯一般在定义变时是用第一种,用方法时用第二种。
希望能给你一些参考
我们看这个
public string FirstName
{
get { return mFirstName; } //这个是当获取时,返回的值,比如 A.FirstName 获取到mFirstName
set { mFirstName = value; } //这个是设置时,如A.FirstName=1时赋值给mFirstName
}
在早期版本中,通常将属性和私有变量分开来写,这样就相当于一个访问器,就是外问设置和访问的时候用FirstName,内部使用的时候用私有的mFirstName。
当然,用get和set的理由不仅在于此,而在于当请求或返回的值并不是该字段或者需要进行其它处理时,比如
public int A{set { a+=value;} //我们设置XX.A时,实际上是对A的值进行增加。这就是可以在get或者set 的时候,进行一些运算或者直接写方法也可以。也可以用get和set控制访问器,就是只允许设置或者只允许读取这样。
所以,当你的属性字段和私有字段相同,且在设置或获取时不进行处理时,直接用 {get;set;}即可,但要是其它时候,则使用另外一种方法。
return this.FirstName; //这个当然是this.FirstName。
关于命名规范,也没有什么标准,一般是公用和私有共存的情况私有的用下划线开始,如
private string _name;
publist string name{get;set;}
至于大小写,一般习惯是除首字母外单词首字母大写或单词首字母大写,看个人习惯。如
firstName
FirstName
不过我个人习惯一般在定义变时是用第一种,用方法时用第二种。
希望能给你一些参考
追问
有在前面加小m的规范吗?我遇到有人在私有变量前加"m"的,还有如果类的私有变量加“_",那么在过程里面的变量前面加什么呢?平时类的私有变量和过程(方法,函数)的内部变量怎么区分开呢?还有就是过程(方法、函数,在类的内部)内部调用类的数据时,是偏向用属性还是私有变量(我好规范我的程序写法)?
展开全部
上面的人都是在扯淡。。其实我觉得你要问的很简单,就是属性和普通的字段有什么区别,答案也很简单,属性是对字段的封装,可以在属性中检查字段是否为空,或者处理跟该字段相关的其他一些字段的值,在WPF中属性还是MVP模式建立不可缺少的一部分,一般来说,在类的内部,我们都会使用字段,然后一个类访问另外一个类的时候,我们都只能使用属性去访问,而不能直接访问字段,因为这样会破坏封装性,你明白了么?
追问
你说的都是我知道的,我问的问题不是这个。
追答
那你可否讲的更详细一点。。。问题描述明确一点
参考资料: baidu.com/=www.haoleiit.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public string FirstName{ get; set; }
这种写法貌似是c# 2.0以后才支持的写法,你翻看以前的,肯定不会这么写
这种写法貌似是c# 2.0以后才支持的写法,你翻看以前的,肯定不会这么写
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义:同一类型的一组变量
元素:数组中包含的变量称为数组的元素.
注意:所有元素必须具有相同的数据类型.
声明格式: 数据类型[] 名称; 如: int [] myarray; myarray=new int[N]
T:基本数据类型,初始化0;
N:元素的个数 0到n-1 N可以省略;
可以声明数组的同时就创建数组。
例:decimal[] myexpense=new decimal[30];
等价于:decimal[] myexpense;
Myexpense= new decimal[30];
声明数组并不创建它们,必须对它进行实例化.在C#中,使用new运算符创建数组对象.并将数组元素初始化为它们的默认值。
下标:索引 下标必须是整型常数或整型表达式
数组名〔下标〕 例:int a=myarray[3];
数组初始化
一.格式: 数据类型〔〕 标识符=new 数据类型〔〕{ , , };
例如:string[] months=new string[]{“一月”, ”二月”, ”三月”}
注意:声明一个数组变量但不将其初始化,在使用数组时使用new运算符将其实例化
int[] myarray;
myarray=new int[]{1,2,3,4}
不能写成:int[] myarray;
myarray={1,2,3,4}
数组对象的赋值运算
数组是引用类型
引用就是门牌号
数组对象的赋值就是将一个数组里的元素赋组另一个数组。
例:
Int[] number=new int[]{1,2,3};
Int[] number1=new int[4,5,6];
Number1=number;
向方法传递数组
传递的是数组的引用(地址),而不是整个数组
Void prinArray(int[] arr)
这是我平时的积累,你自己看看能用的着不.
元素:数组中包含的变量称为数组的元素.
注意:所有元素必须具有相同的数据类型.
声明格式: 数据类型[] 名称; 如: int [] myarray; myarray=new int[N]
T:基本数据类型,初始化0;
N:元素的个数 0到n-1 N可以省略;
可以声明数组的同时就创建数组。
例:decimal[] myexpense=new decimal[30];
等价于:decimal[] myexpense;
Myexpense= new decimal[30];
声明数组并不创建它们,必须对它进行实例化.在C#中,使用new运算符创建数组对象.并将数组元素初始化为它们的默认值。
下标:索引 下标必须是整型常数或整型表达式
数组名〔下标〕 例:int a=myarray[3];
数组初始化
一.格式: 数据类型〔〕 标识符=new 数据类型〔〕{ , , };
例如:string[] months=new string[]{“一月”, ”二月”, ”三月”}
注意:声明一个数组变量但不将其初始化,在使用数组时使用new运算符将其实例化
int[] myarray;
myarray=new int[]{1,2,3,4}
不能写成:int[] myarray;
myarray={1,2,3,4}
数组对象的赋值运算
数组是引用类型
引用就是门牌号
数组对象的赋值就是将一个数组里的元素赋组另一个数组。
例:
Int[] number=new int[]{1,2,3};
Int[] number1=new int[4,5,6];
Number1=number;
向方法传递数组
传递的是数组的引用(地址),而不是整个数组
Void prinArray(int[] arr)
这是我平时的积累,你自己看看能用的着不.
追问
你牛X,风马牛不相及的东西。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询