//我碰到个很要命的问题,实在没办法基础不牢固,连找错都无能为力,我把几处可能出问题的地方
//贴出来,大家帮帮我,否则我卡在这里一动都动不了了。
class A
{
}
class B
{
//其他属性和方法
private A[] _myA;
public A[] MyA //危险1:要不要用索引啊?
{
get
{
return _myA;
}
set
{
_myA = value;
}
}
}
class C
{
//其他属性和方法
private static B[] _myBs=new B[10]{new B(构造函数),new B(构造函数)...........}; //这里的构造函数包含除A[] _myA之外的其他信息
public B[] MyBs //危险2:要不要用索引啊?
{
get
{
return _myBs;
}
set
{
_myBs = value;
}
} static C() //危险3:用静态构造函数行不行啊?
{
if(_myBs[0].xxx.Length==0)
{
_myBs[0].MyA=new A[]{new A(构造函数),new A(构造函数)} //完成_myBs的完整初试化
} if(_myBs[1].xxx.Length==0)
{
//同样
} //直到 if(_myBs[9].xxx.Length==0)
{
//同样
}
}
}
class D
{
int i=0;
B mybbb=C.MyBs[i] ; //就这里报错说,初始化失败
}
//因为完整的类比较复杂,所以我就没列出来了
{
int i=0;
B mybbb
public D()
{
mybbb=new C().MyBs[i] ; //就这里报错说,初始化失败
}
}
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
{
//............
private void btn_Load_Click(object sender, EventArgs e)
{
//复杂的很
int i=0;
B mybbb=C.MyBs[i] ; //就这里报错说,初始化失败
//mybbb=new C().MyBs[i] ; 静态属性也要new吗?
}
}
應該不行吧,C.MyBS返回一個B[],但是你不能C.MyBs[i]
B[] mybbb = C.MyBs;
你試下,
mybbb=mybbbs[i];
public static B[] MyBs
這樣就OK了.
{
if(_myBs[0].xxx.Length==0)
{
_myBs[0].MyA=new A[]{new A(构造函数),new A(构造函数)} //完成_myBs的完整初试化
} if(_myBs[1].xxx.Length==0)
{
//同样
} //直到 if(_myBs[9].xxx.Length==0)
{
//同样
}
}我想实现的功能是B mybbb=C.MyBs[i] ;也就是第一次被调用时完成完整的初始化,怎么办啊?
{
//其他属性和方法
private static B[] _myBs=new B[10]{new B(构造函数),new B(构造函数)...........}; //这里的构造函数包含除A[] _myA之外的其他信息
//很明显下面这个是一个 实例属性访问器 因为没有static
//实例属性访问器必须在C类的实例中访问 而不是C.MyBs
//而是
//C aa = new C();
//B b = aa.MyBs[0];
public B[] MyBs
{
get
{
return _myBs;
}
set
{
_myBs = value;
}
}}
這樣就已經是初始化你的C類了啊,
{
get
{
return _myBs;
}
set
{
_myBs = value;
}
} 我要实现的功能是,开始时只初始化类C里的_myBs的部分东西
private static B[] _myBs=new B[10]{new B(构造函数),new B(构造函数)...........};
等在类D里面调用B mybbb=C.MyBs[i] ; 时在把C里的_myBs[i]的部分东西完全初始化,我那个static C() //说实在的本来我想:要是有static C(i) {//完全初始化_myBs[i]}就好了
{ //而我这个调用B mybbb=C.MyBs[0]的时候就完全初始化_myBs[0~9]了}
if(_myBs[0].xxx.Length==0)
{
_myBs[0].MyA=new A[]{new A(构造函数),new A(构造函数)} //完成_myBs的完整初试化
} if(_myBs[1].xxx.Length==0)
{
//同样
} //直到 if(_myBs[9].xxx.Length==0)
{
//同样
}
}
mybbb=mybbbs[i];
如果要这么用,就要用static 属性,
public static MyBs
{
}
{
if(_myBs[0].xxx.Length==0)这个if这里打上断点,就应该能跟进去看是什么错误了我不知道你这里的xxx是指的什么,但是感觉应该是这里的问题
到寝室来调试,看来要等到明天白天了.非常感谢大家的关注,我真应该说明白我要干什么了.其实是
类D要使用类C里的_myBs[10],因为这个东西包含的信息分为基本信息,和附加信息.而且基本信息就一点点,附加信息
是一个xxx数组(100个元素以上)._myBs[i]都可能但并不是所有都会派上用场的,所以我在属性定义的时候就完成部分
初始化工作,而当某个_myBs[i]只是当被使用是,就调用构造函数完成它的附加信息,也就是_myBs[i].xxx的初始化工作.
但是我的水平实在有限,并不能把自己的想法灌输到程序里.
我这个static C()
{
if(_myBs[0].xxx.Length==0)//如果附加信息没被初始化则完成初始化
{
_myBs[0].MyA=new A[]{new A(构造函数),new A(构造函数)} //完成_myBs的完整初试化
} if(_myBs[1].xxx.Length==0)
{
//同样
} //直到 if(_myBs[9].xxx.Length==0)
{
//同样
}
}其实在调用任何一个_myBs[i]的时候就已经把其它的成员也完成附加信息的初始化.我真想调用
_myBs[i]的时候就只初始化自己啊!但我做不到,现在的我太弱了....
你的
public B[] MyBs //危险2:要不要用索引啊?
不是静态的,需要先实例化C才能使用
C c = new C(); //实例化
B mybbb = c.MyBs[i]; //使用然后,由于C的构造函数是静态的,new C()的时候根本实例化不了,
需要将
static C() //危险3:用静态构造函数行不行啊?
改成
public C() 再然后
class B
没有对 private A[] _myA; 进行初始化,还要报错
所以public A[] MyA需要改一下,大体如下面的
public A[] MyA //危险1:要不要用索引啊?
{
get
{
if ( _myA == null )
{
_myA = new A[] { new A(), new A() };
}
return _myA;
}
set
{
_myA = value;
}
}
当然你也可以通过其他方法初始化数组