A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 重新开始 于 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("我是儿子,会玩游戏。");
        }
    }
}

评分

参与人数 1技术分 +2 收起 理由
追溯客 + 2

查看全部评分

8 个回复

倒序浏览
非静态的字段、方法或属性“member”要求对象引用


必须首先创建对象实例,才能使用非静态的字段、方法或属性。
回复 使用道具 举报
        string firstname;   //这里定义的是私有字段

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


你想访问私有字段肯定不行的啊

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
私有字段
public string firstname;

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 念念念念_、 于 2013-10-29 13:11 编辑

string firstname;
前面加个public  就好了

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
base中传的参数应该是子类构造函数中对应的参数而不是父类中的字段,且父类中字段未加访问修饰符默认为私有~~
回复 使用道具 举报
小人渣子 发表于 2013-10-28 10:27
base中传的参数应该是子类构造函数中对应的参数而不是父类中的字段,且父类中字段未加访问修饰符默认为私有 ...

照你讲的已经正常运行
回复 使用道具 举报
这个问题不是访问的问题 ,首先你要了解如下:

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

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

      public Son(string name, decimal wealth, Blood blood): base(name, wealth, blood)
        {
        }
    将name传递到父类的构造函数中

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
黑马有你更精彩!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马