学习c#的封装特性时,看到如下一个小例子:(本人是新手,望高手不吝赐教,先谢过了)
//只读封装
public class Department
{
private string department;
public Department(string str)//有参构造函数
{
department = str;
}
public string DepartmentName
{
get { return this.department; }
}
}
public class Tester
{
static void Main(string[] args)
{
Department pm = new Department("myName");
Console.WriteLine("pm.DepartmentName is:{0}", pm.DepartmentName);
Console.Read();
}问题:调用有参构造函数时应该是把字符串"naName"赋值给了私有字段department了吧?那为什么
Console.WriteLine()内部要写pm.DepartmentName而不写department呢????
//2:只写封装
public class SetPart
{
private string setpart;
public string Setpartname
{
set
{
setpart = value;
Console.WriteLine("the Setpartname is:{0}",setpart);
Console.Read();
}
}
}
public class Tester
{
static void Main(string[] args)
{
SetPart s=new SetPart();
s.Setpartname= "my name";
}
}//问题:这个测试函数部分是怎样的执行过程啊?语句s.Setpartname= "my name"就是给属性赋值吧?为什么会执行了 Console.WriteLine()?而且内部为什么不写s.Setpartname而写setpart呢?
说说我的理解吧。
调用有参构造函数时应该是把字符串"naName"赋值给了私有字段department了吧?那为什么
Console.WriteLine()内部要写pm.DepartmentName而不写department呢????
你的pm是一个实例,你的类定义的时候怎么知道你的实例名字是pm?在外面用属性访问。。。
而至于为什么要把这个字段封装成属性,我的理解是:
字段是内部用的,是不能用到外面的,而属性则相反,是用在外部的(内部也可以用)。把字段封装成属性我觉得是要这么用的
private string name;
public string Name
{
get{ return "我的名字是:"+name;}
set{name=value;}
}
可以属性和字段不尽相同,但是你如果是本来就相同的话,可以不要字段,直接声明属性,比如:
public string Name
{get;set;}
然后内部外部都可以用到。另外字段是类内部用的,而属性可以控制访问权限,比如只让get或只让set。
这个测试函数部分是怎样的执行过程啊?语句s.Setpartname= "my name"就是给属性赋值吧?为什么会执行了 Console.WriteLine()?而且内部为什么不写s.Setpartname而写setpart呢?
跟刚才差不多,你在类里面还不知道你的实例名。
而且内部为什么不写s.Setpartname而写setpart呢?
s只是类的一个实例而已啊
我个人觉得只是个方法来的而已,以前听前辈说, 对于属性是一个读的方法和一个设置的方法,
推荐看看 这本书中有提到过, 你必须知道的.NET,
http://www.cnblogs.com/anytao/archive/2007/09/14/must_net_catalog.html