lz似乎还没有看明白public class M
{
private int count = 1; public int Count
{
get { return count; }
set { count = value; }
}
}
………… M MM = new M(); MM.Count = 10;//ok
MM.count // count 是M的私有成员 所以在这里根本就不可见
{
private int count = 1; public int Count
{
get { return count; }
set { count = value; }
}
}
………… M MM = new M(); MM.Count = 10;//ok
MM.count // count 是M的私有成员 所以在这里根本就不可见
解决方案 »
- winform 做考试软件,在设计完考试试题后, 怎么生成考试测试软件
- 请问各位,有了SDK文件后如何开发应用程序?我用的C#,环境是:visual studio2005 ~ 第一次用 sDK开发 呵呵~ 谢谢解答!
- 新来的,不要笑
- 那位高手知道如何获取一个线程所占用的文件。
- 构造函数这样写对吗?为什么测试总报错?
- 在C#中,myCommand1、myCommand2和myCommand3是独立,reader1、reader2和reader3也是独立的,但在运行时,出错,信息为“已打开的与此连
- C#Form编程,Datatable增加1行,Datagridview增加2行,不知道为什么
- 在winform里内嵌了webbrowser控件,用webbrowser打开excel文件遇到几个问题(在线等)
- C# 获取CorelDRAW文件里文字物件里的字,中文是乱码(像是类似韩文的字),英文和数字可以正常显示,求大神指点如何能正确获取中文。
- C#执行存储过程超时 但直接调用不用1秒
- 简单问题
- sql2005在线恢复bak的存储过程?
MM.count 对於M是可见的
在2003下是这样的
M objM=new M();
objM.Test();未处理的“System.StackOverflowException”类型的异常出现在
按我的理解,实例化objM的时候,它需要在内部实例化一个M类型的私有变量MM,而实例化MM的时候,又需要在MM的内部实例化一个M类型的私有变量MM,…………
就这样“从前有座山,山上有座庙……”
没有头了…………
不过以下这段代码已经VS2005 运行通过public class Class1
{
int count = 1;
public Class1(int count)
{
this.count = count;
}
public Class1(Class1 c1)
{
this.c1 = c1;
}
private Class1 c1; public int Test()
{
if (c1 != null)
return c1.count;
else
return count;
}
}
private void Form2_Load(object sender, EventArgs e)
{
MyTest.Class1 c1 = new Class1(12);
MyTest.Class1 c2 = new Class1(c1);
this.Text = c2.Test().ToString();
}
{
private M MM ;
private int count = 1; public int Count
{
get { return count; }
set { count = value; }
} public int Test()
{
MM = new M();
return MM.count;
} }
………………这样是可以的 但是我没有研究过 不知道这样做有何好处 貌似叫做类的对象复用??但是 在类内部代码中MM肯定可以访问到count的
而前者只是定义了一个变量,并没有初始化他,也就不会循环递归了
MM中访问到count的问题是肯定的,因为MM是类M的成员,Test方法也是,类中的成员自然不论何时都可以互相访问的,写过一个类似队列的例子,其中节点的定义大概也是如此吧
public class Node
{
private Node preNode;
private Node nextNode;
public Node PreNode
{
get
{
if (preNode!=null)
return preNode;
else
throw new NullReferenceException("没有Previous节点");
}
}
public Node NextNode
{
get
{
if (nextNode!=null)
return nextNode;
else
throw new NullReferenceException("没有Next节点");
}
}
}如果要添加一个前置节点的前置节点这个属性,就可以用return preNode.preNode了,还有什么好处我就不太了解了,等待楼下高手解释。
private M MM = new M();是会产生从前有座山的问题,但是搞成
private static M MM = new M();就不会了。
Test 本身就属于class M 所以它要访问M的私有成员是合法的,这个你可以重温一下private public...的定义描述
另外一个是LZ代码的小问题,与LZ的问题倒没有什么关系
private M MM = new M();
MM在构造的时候会被调用,而产生的操作是创建一个新的M对象
这样构造函数就产生了一个没有退出条件的无限递归调用。