using System;    public class Employee
    {
        public string eName;
        private string internal_eDept;
        public string eDapt
        {
            get
            {
                return internal_eDept;
            }
            set
            {
                internal_eDept = value;
            }
        }
        class Test
        {
            static void Main()
            {
                Employee one = new Employee();
                one.eName = "Scooby";
                one.eDapt ="Design";
                Console.WriteLine("The Name of the Employee is {0} and the Department is {1}",one.eName,one.eDapt);
            }
        }    }

解决方案 »

  1.   

    很明显,internal_eDept是一个属性。
    虽然设置为private但是还是可以直接以Employee.internal_eDept的方式访问。
    但是只是private成员变量的话,这样访问就会报错。而且,一般来说,使用属性是想以方便的方式访问对象的成员,而且又要遵循一些属性的型别限制。
    在.net中,推崇使用属性,而尽量避免使用public成员变量。
    详细的说明可以查阅MSDN
      

  2.   

    楼上说的很清楚了,字段就是一般以m_开头的私有成员变量,
    共有字段可以外部直接访问,但面向对象的程序不推荐。属性、方法等就是函数,
    函数(属性)就是访问成员变量的(方法),必须为公有public,不然外部也无法访问。
      

  3.   

    属性是表示对象的某种状态的成员而字段是属于对象的保存有一定数据的变量你的例子里,internal_eDept是字段,它属于对象所有,保存有该对象(雇员)的部门的名称,eDept 是属性,获取该属性的值 (get) 可以获知当前雇员的部门名称,设置该属性的值 (set) 可以修改当前雇员的部门虽然在你的例子里,公共属性eDept只是对私有字段internal_eDept的直接暴露,但是一般情况下使用属性总有一些好处,例如对无效值的拒绝——还是你的例子,但是修改 set 代码:
    public string eDept {
        get { return internal_eDept; }
        set {
            if (value == null || value == String.Empty)
                throw new ArgumentException("未指定部门名称", "eDept");
            internal_eDept = value;
        }
    }
    这样,用于保存雇员部门的字段就可以免予被赋予空值的困扰了。
    再例:
    private int count;
    public int Count {
        get { return count; }
        // 没有 set - 不能直接修改 Count
    }
    public bool IsEmpty {
        get { return count == 0; }
    }
    上例里,Count 属性只有 get 没有 set,这就有效防止外部修改 count 变量(字段),确保数据统一,但仍然允许外部获取 count 的值。如果直接将 count 字段公开,那么任何调用者都可以直接修改了。
    此外,属性也不一定要有一一配对的私有字段,例如上例里,IsEmpty属性没有相对应的私有字段,当调用者获取它的值的时候,get{}里面的代码访问对象的其他成员确定返回值。最后,属性不一定是public的,也可以定义protected甚至private的属性,只要程序员觉得方便,在程序语言的逻辑规定内任意创新,完全没有问题。
      

  4.   

    谢谢大家对我的指导
    我现在不明白的是    
       public class Employee
        {
            public string eName;
    ......
            class Test
            {
                static void Main()
                {
                    Employee one = new Employee();
                    one.eName = "Scooby";
    这个地方~
    和你们讲的有什么区别
      

  5.   

    one.eName = "Scooby";是直接的类的字赋值,但public string eName;eName的访问属性为Public,一般不会这样用,因为破坏了面向对象的封装,所以用一些public的接口来访问,例如属性,private string eName;
    ......
    public string EXXXNAme
            {
                get
                {
                    return eName;
                }
                set
                {
                    eName= value;
                }
            }
    还可以定义类的一些共有的方法来访问
    public setSomeValueaName(string strName)
    {
    this.eName = strName ;
    }
    public string GetSomeValueaName()
    {
    rturn this.eName ;
    }
    还有属性可以设一些相应的访问权限,例如只读....