C#为什么不能在一个类中调用另一个类的变量,而必须是在方法里实例化后的调用

publicclassA{publicintx;}//在类B中使用类A中的变量publicclassB{//为什么在类下面直接不能调用Aa=newA();a.x=200;... public class A
{
public int x;
}

// 在类B中使用类A中的变量
public class B
{
//为什么在类下面直接不能调用
A a = new A();
a.x = 200;
public void Method()
{
//在方法里 却可以。存取A中的实例变量x,必须先实例化A,然后才能存取
A a = new A();
a.x = 200;
}
}
展开
 我来答
376710727
推荐于2017-11-30 · TA获得超过8937个赞
知道大有可为答主
回答量:2593
采纳率:100%
帮助的人:1268万
展开全部
你需要看一下入门的书籍,再理解一下C#语法规范。
c#是一种面向对象的语言,也就是说,你的class A\B 都是对象。
而你声明的变量 x 是在A中的,
也就是说,当代码没有运行到class A的时候, 你是不可能知道A中有一个x 的。
所以,你在classA中,去操作类内部的变量,肯定是可以的,因为代码一定会运行,
而你在classB中,你是在运行B的代码,如果你要调用x,你就要先把classA给实例化,让编译器知道你在用A了,才可以调用A中的x。

如果你想不用new 就访问一个变量,可以使用static修饰符

public static class A
{
public static int x;
}
这样只要程序启动,A和x都一直在内存中,你随时可以直接调用,但是由于是静态的,他们是不会被dispose的,也就是一直在占内存。
而之前的做法,当A不被调用的时候,垃圾回收器会自动回收A,释放内存。
sgyhbd
2017-11-29
知道答主
回答量:1
采纳率:0%
帮助的人:925
引用376710727的回答:
你需要看一下入门的书籍,再理解一下C#语法规范。
c#是一种面向对象的语言,也就是说,你的class A\B 都是对象。
而你声明的变量 x 是在A中的,
也就是说,当代码没有运行到class A的时候, 你是不可能知道A中有一个x 的。
所以,你在classA中,去操作类内部的变量,肯定是可以的,因为代码一定会运行,
而你在classB中,你是在运行B的代码,如果你要调用x,你就要先把classA给实例化,让编译器知道你在用A了,才可以调用A中的x。

如果你想不用new 就访问一个变量,可以使用static修饰符

public static class A
{
public static int x;
}
这样只要程序启动,A和x都一直在内存中,你随时可以直接调用,但是由于是静态的,他们是不会被dispose的,也就是一直在占内存。
而之前的做法,当A不被调用的时候,垃圾回收器会自动回收A,释放内存。
展开全部
你自己把自己都说进去了,你都说在classB中,是在运行B的代码,如果要调用x,就要先把classA给实例化,让编译器知道你在用A了,才可以调用A中的x;你这不是承认可以这样调用吗?这个楼主反应的问题不是矛盾吗?

其实是实例化A后没有办法调用A的成员,因为类的成员只有方法,字段,属性,索引等,这样的调用根本无法被调用这个类的类所引用.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是谁啊aa3
2019-11-23
知道答主
回答量:1
采纳率:0%
帮助的人:674
展开全部
在类B中使用类A中的变量,不写在方法里没有任何意义
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式