黑马程序员技术交流社区
标题:
“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