求教关于字段类型的可访问性不能比字段本身的可访问性低的问题

wyumening 2010-10-21 10:51:53
输入下列代码后出现错误:显示的错误帮助是字段类型的可访问性不能比字段本身的可访问性低,因为所有的公共构造都必须返回公共的可访问对象。
class line
{
class point
{
public int x;
public int y;
}

public point starting = new point();
public point ending = new point();
}


class Program
{
static void Main(string[] args)
{
line myline = new myline();
myline.starting.x = 1;
myline.starting.y = 2;
myline.ending.x = 3;
myline.ending.y = 4;

Console.WriteLine("point1:{0},{1}", myline.starting.x, myline.starting.y);
Console.WriteLine("point2:{0},{1}", myline.ending.x, myline.ending.y);
Console.ReadKey();
}
}

我能理解错误出在哪里,声明的point类可访问性是private,接着又声明了两个可访问性为public 的point类型的对象,所以会出错,可是我看了书上的另外一个例子后,我又有点糊涂了,代码如下:
class point
{
public int x;
public int y;
}
class line
{

public point starting = new point();
public point ending = new point();
}


class Program
{
static void Main(string[] args)
{
line myline =new line ();
myline.starting.x = 1;
myline.starting.y = 2;
myline.ending.x = 3;
myline.ending.y = 4;

Console.WriteLine("point1:{0},{1}", myline.starting.x, myline.starting.y);
Console.WriteLine("point2:{0},{1}", myline.ending.x, myline.ending.y);
Console.ReadKey();
}
}
这个例子可以正常运行,我搞不懂的是,这个例子为什么可以正常运行?不是说字段类型的可访问性不能比字段本身的可访问性低吗?那为什么在这个例子中,point类的可访问性修饰符是private,接着又声明了两个为public的point类对象又不会出错呢?
...全文
886 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2010-10-21
  • 打赏
  • 举报
回复
看来你还是没理解我说的,相信了上面那个胡说八道的...
husanbo110 2010-10-21
  • 打赏
  • 举报
回复
我是这么理解的
你在A类中定义一个B类 那么B类就属于A类的一个成员属性

这个时候访问B的话就应该需要通过A来访问
有因为B类不是public的
所以是访问不到的


起始就算这个时候B类设置为public
也应该是访问不到的
class line
{
class point
{
public int x;
public int y;
}

public point starting = new point();
public point ending = new point();
}
这一段代码 应该是
class line
{
class point
{
public int x;
public int y;
}

public this.point starting = new this.point();
public this.point ending = new this.point();
}
通过this是访问不到point
因为他是私有的
我自己也研究了半天
共同学习



起始就算这个时候B类设置为public
也应该是访问不到的
这个写错了,可以访问的到
husanbo110 2010-10-21
  • 打赏
  • 举报
回复
我是这么理解的
你在A类中定义一个B类 那么B类就属于A类的一个成员属性

这个时候访问B的话就应该需要通过A来访问
有因为B类不是public的
所以是访问不到的


起始就算这个时候B类设置为public
也应该是访问不到的
class line
{
class point
{
public int x;
public int y;
}

public point starting = new point();
public point ending = new point();
}
这一段代码 应该是
class line
{
class point
{
public int x;
public int y;
}

public this.point starting = new this.point();
public this.point ending = new this.point();
}
通过this是访问不到point
因为他是私有的
我自己也研究了半天
共同学习
vrhero 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
不要纠结这些细节。没太大意义。可能是编译器检查的漏洞。按理说第二种也应该报错才对。
[/Quote]
第二种没错...都是internal不存在问题...

第一个例子中嵌套类作为class成员默认访问修饰符是private...因此访问性不一致...
wyumening 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vrhero 的回复:]
class默认的访问修饰符不是private而是internal,成员的访问修饰符如较高会自动降级...

而你这两个例子的区别是嵌套类,你的理解是不对的...
[/Quote]
多谢指点,能否说详细点呢?

vrhero 2010-10-21
  • 打赏
  • 举报
回复
class默认的访问修饰符不是private而是internal,成员的访问修饰符如较高会自动降级...

而你这两个例子的区别是嵌套类,你的理解是不对的...
兔子-顾问 2010-10-21
  • 打赏
  • 举报
回复
不要纠结这些细节。没太大意义。可能是编译器检查的漏洞。按理说第二种也应该报错才对。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧