首页 新闻 会员 周边

c#中的封装

0
悬赏园豆:10 [已解决问题] 解决于 2012-03-10 21:07

学习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呢?

巴维尔的主页 巴维尔 | 初学一级 | 园豆:61
提问于:2011-07-26 15:13
< >
分享
最佳答案
1

说说我的理解吧。

调用有参构造函数时应该是把字符串"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呢?

跟刚才差不多,你在类里面还不知道你的实例名。

收获园豆:10
顾晓北 | 专家六级 |园豆:10844 | 2011-07-26 17:33
多谢指教!
巴维尔 | 园豆:61 (初学一级) | 2011-07-27 17:14
其他回答(1)
0

而且内部为什么不写s.Setpartname而写setpart呢?

s只是类的一个实例而已啊

 

我个人觉得只是个方法来的而已,以前听前辈说, 对于属性是一个读的方法和一个设置的方法,

推荐看看 这本书中有提到过, 你必须知道的.NET,

http://www.cnblogs.com/anytao/archive/2007/09/14/must_net_catalog.html

阿K&LiveCai | 园豆:514 (小虾三级) | 2011-07-26 15:21
谢谢啦!
支持(0) 反对(0) 巴维尔 | 园豆:61 (初学一级) | 2011-07-26 16:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册