黑马程序员技术交流社区

标题: “test3.Father.firstname”不可访问,因为它受保护级别限制??? [打印本页]

作者: 重新开始    时间: 2013-10-27 22:36
标题: “test3.Father.firstname”不可访问,因为它受保护级别限制???
本帖最后由 重新开始 于 2013-10-28 11:08 编辑

       public enum Blood
    {
        A, B, AB, O
    }
    //定义父类
    public class Father
    {
        string firstname;

        public string Firstname
        {
            get { return firstname; }
            set { firstname = value; }
        }
        decimal wealth;

        public decimal Wealth
        {
            get { return wealth; }
            set { wealth = value; }
        }

        Blood blood;

        public Blood Blood
        {
            get { return blood; }
            set { blood = value; }
        }

        //父类的构造函数
        public Father(string firstname, decimal wealth, Blood blood)
        {
            Firstname = firstname;
            Wealth = wealth;
            Blood = blood;
        }
    }

public class Son : Father
    {
        //定义儿子类的构造函数函数,通过base调用父类构造函数给子类字段赋值。
        //???红色字体firstname一直提示  “test3.Father.firstname”不可访问,因为它受保护级别限制,怎么回事,test3是命名空间,              //firstname, wealth, blood三个参数访问级别是一样的,为什么单firstname出错???
        public Son(string name, decimal wealth, Blood blood): base(firstname, wealth, blood)
        {
        }
        public void PlayGame()
        {
            Console.WriteLine("我是儿子,会玩游戏。");
        }
    }
}


作者: 茹化肖    时间: 2013-10-27 22:48
非静态的字段、方法或属性“member”要求对象引用


必须首先创建对象实例,才能使用非静态的字段、方法或属性。

作者: ィSlick    时间: 2013-10-27 22:54
        string firstname;   //这里定义的是私有字段

        public string Firstname  //这个才是你对外的属性  
        {
            get { return firstname; }
            set { firstname = value; }
        }


你想访问私有字段肯定不行的啊
作者: aihuahuaxx    时间: 2013-10-28 09:05
私有字段
public string firstname;


作者: 念念念念_、    时间: 2013-10-28 10:11
本帖最后由 念念念念_、 于 2013-10-29 13:11 编辑

string firstname;
前面加个public  就好了
作者: 小人渣子    时间: 2013-10-28 10:27
base中传的参数应该是子类构造函数中对应的参数而不是父类中的字段,且父类中字段未加访问修饰符默认为私有~~
作者: 重新开始    时间: 2013-10-28 11:03
小人渣子 发表于 2013-10-28 10:27
base中传的参数应该是子类构造函数中对应的参数而不是父类中的字段,且父类中字段未加访问修饰符默认为私有 ...

照你讲的已经正常运行
作者: 黑飞马    时间: 2013-10-28 11:27
这个问题不是访问的问题 ,首先你要了解如下:

  1.派生类不能继承父类的构造函数 ,所以想使用父类的构造函数就要使用 base关键字  ,这一点你用到了

  2.如果使用base 则使用它就像使用方法一样,必要匹配他的参数类型和个数,相当于给他传递参数,所以你的子类中的构造函数应该写成如下:

      public Son(string name, decimal wealth, Blood blood): base(name, wealth, blood)
        {
        }
    将name传递到父类的构造函数中
作者: 追溯客    时间: 2013-10-29 07:39
黑马有你更精彩!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2