关于c#类之间可访问性问题 a是一个internal的类型,所以这个类型的字段aa不能作为public类的public字段,这会导致访问不到类型a的地方能访问到字段aa,而这个时候字段aa的类型是不可见的,这是不允许的。如果字段aa所在的类是internal的(即把class b前面的public去掉)或者这个字段aa本身是internal的,就没问题了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不写,默认是private的,这样就是说对外不公开这个类,但你的b是公开的,就是说外部可以用访问到b,但你的b类不能公开a类的对象,因为a类型是private的,如果公开。编译器就不知道你的a类到底要不要公开。你声明和调用,都统一成private,public,internal就没问题的了。 Q1: A: 1.Class a 为internal的. 2.Class b 为public. 在public的类里不能将a 申明为public(因为本身a 就不可能为public),即你只能申明a为比它本身修饰符低的或者同级的.如private,internal.Q2: A: 将Class b的public修饰符去掉,则b于a都属于同一级别了,可以互相访问. 结合“hbxtlhx(平民百姓)”说的:在一个类里公开另一个类型的时候,另一个类型的修饰符级别要>=你这个类型的修饰符级别才行. 还不是特别明白, class a的类型怎么是Internal 默认不是Private 默认类型是internal,这个是C#的规则,而且类好像不能定义为private和protected。一个internal类如果在public类中产生public的实例,那么就代表这个类的对象的内容可以被外部项目访问,这与这个类的internal类型语义相冲突,所以无法编译。总结起来就是楼上几位所说的:在一个类里公开另一个类型的时候,另一个类型的修饰符级别要>=你这个类型的修饰符级别。 定义的访问级别要和调用时一致,或公用性小于定义,一般定义时都是internal 或public不然要报错,这个还需要问原因吗? using System;interface ISampleInterface{ void SampleMethod();}class ImplementationClass : ISampleInterface{ public void SampleMethod() { System.Windows.Forms.MessageBox.Show("test2"); } static void Main() { ImplementationClass t=new ImplementationClass(); //ISampleInterface isi=(ISampleInterface)t; //t.ISampleInterface.SampleMethod(); t.SampleMethod(); }}但是我这样也没有申明啊,但是程序没什么问题,我想是不是显示调用的问题.. ls的你的t又没有修饰成public,怎么会有问题 class的默认访问修饰符是internal,class的内部成员默认访问修饰符才是private其他的hbxtlhx(平民百姓)已经讲得很清楚了 C# 怎么获取当前时间 无法实现接口成员,因为它不是公共的? 大家来看看,关于net的反射, 我有一个菜单项里面有个叫AAA 的选项, 然后数据库里面存放了一个AAA字符串............. C#为什么不让改变comboBox;maskedTextBox控件的高度? 已经更新超过300G的软件 c#如何创建临时表 C#优势在哪里啊 请问.Net下能用O-R映射吗?哪里有相关资料? 窗体中同时使用服务器端控件和客户端控件(脚本),如何取客户端控件的值? 关于游戏服务器的讨论,欢迎参与! 高分求改一段代码 把控制台程序改为winform C#里面有无 哑异常?
A:
1.Class a 为internal的.
2.Class b 为public.
在public的类里不能将a 申明为public(因为本身a 就不可能为public),即你只能申明a为比它本身修饰符低的或者同级的.如private,internal.Q2:
A:
将Class b的public修饰符去掉,则b于a都属于同一级别了,可以互相访问.
结合“hbxtlhx(平民百姓)”说的:
在一个类里公开另一个类型的时候,另一个类型的修饰符级别要>=你这个类型的修饰符级别才行.
一个internal类如果在public类中产生public的实例,那么就代表这个类的对象的内容可以被外部项目访问,这与这个类的internal类型语义相冲突,所以无法编译。
总结起来就是楼上几位所说的:
在一个类里公开另一个类型的时候,另一个类型的修饰符级别要>=你这个类型的修饰符级别。
interface ISampleInterface
{
void SampleMethod();
}
class ImplementationClass : ISampleInterface
{
public void SampleMethod()
{
System.Windows.Forms.MessageBox.Show("test2");
}
static void Main()
{
ImplementationClass t=new ImplementationClass();
//ISampleInterface isi=(ISampleInterface)t;
//t.ISampleInterface.SampleMethod();
t.SampleMethod();
}}
但是我这样也没有申明啊,但是程序没什么问题,我想是不是显示调用的问题..
你的t又没有修饰成public,怎么会有问题