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

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;
}
}

你需要看一下入门的书籍,再理解一下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,释放内存。
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-11-29
你自己把自己都说进去了,你都说在classB中,是在运行B的代码,如果要调用x,就要先把classA给实例化,让编译器知道你在用A了,才可以调用A中的x;你这不是承认可以这样调用吗?这个楼主反应的问题不是矛盾吗?

其实是实例化A后没有办法调用A的成员,因为类的成员只有方法,字段,属性,索引等,这样的调用根本无法被调用这个类的类所引用.
第2个回答  2019-11-23
在类B中使用类A中的变量,不写在方法里没有任何意义

C#为什么不能在一个类中调用另一个类的变量,而必须是在方法里实例化后...
c#是一种面向对象的语言,也就是说,你的class A\\B 都是对象。而你声明的变量 x 是在A中的,也就是说,当代码没有运行到class A的时候, 你是不可能知道A中有一个x 的。所以,你在classA中,去操作类内部的变量,肯定是可以的,因为代码一定会运行,而你在classB中,你是在运行B的代码,...

...吗?为什么我在方法外实例化了一个类,在方法里面无法调用它的方法呢...
类的实例化可以在方法外面也可以在方法里面,访问类的方法要注意看方法的访问限制修饰符,如果是private的则外部不可访问,如是protect则非子类不可访问,如是internal则非在一个程序集不可访问,如是public则都可访问,还有要看方法是否为静态方法,是则必须通过类名.方法名访问 ...

C#类中定义的方法,为什么有些必须经过实例化才能调用,而有些方法不必实...
上面定义了两个对象Text1和Text2,是类Text的具体实例,它们叫对象。即Text经过实例化得到Text1和Text2对象。一定要分清类和对象的关系,比如 人 是一个类,而你和我就是人的一个对象。类还有抽象类 abstract public class People {} 上面定义了一个抽象类,它不可以实例化,只能被继承 希望对你有...

C#怎么在一个类中调用另一个类的变量?
(1)如果两个类没有继承关系,存取另一个类中变量的方法如下:public class A{ \/\/ 注意: \/\/ Count是静态变量(static),称为类变量。类变量无需实例化即可使用 public static int Count; \/\/ 注意: \/\/ x是不是静态变量,称为实例变量,只能通过实例存取。 public int x;}...

C++如何在一个类中引用另一个类的变量
即定义中),因为实例是在程序中动态分配的内存,类A必然先于实例B存在,所以A并不能知道B的存在。B可以引用类A的静态变量,理由同1。如果是在运行时才引用。你只要在类A里写一个函数,例如function(B b),这样你要调用的时候通过这个函数做接口就行了,至于b你要做什么,就是你的事了。

如何在C#中,在一个类里调用另外一个类的方法
把A类你有引用的方法加static public class A{public static void MethodA()\/\/如果不是static 就要实例化才能调用{}}public class B{public void MethodB{A.MethodA();\/\/第一种方式如果MethodA()没有加static关键字则使用 new A().MethodA();}} 【...

C#里面静态方法和静态变量的一点问题?
实例方法必须在实例化一个具体对象之后才能访问,为了封装性,对象的成员变量不允许外部程序访问,只允许实例方法访问,也就是做代码访问权限隔离。这种机制对于面向对象思想指导下编程是必须的也是标准。但是我们往往有时候需要做一些数据处理,而这些处理即属于某个类但又具有通用性,而往往又具有一定代码量(...

如何在C#中,在一个类里调用另外一个类的方法
public static void MethodA()\/\/如果不是static 就要实例化才能调用 public class B public void MethodB A.MethodA();\/\/第一种方式 如果MethodA()没有加static关键字 则使用 new A().MethodA();} 语言结构 类:一个基本的C#类中包含数据成员、属性、构造器和方法。属性可以是静态或实例成员...

在C#中,在类中实例化,和在方法中实例化有什么区别
一个是局部,一个是全局,在类里实例化的整个类可以用,在方法里的只有当前方法可以用。

C# 调用不到类里面的函数?是调用方法有问题还是类里面函数有问题?但...
如果方法不是用private(私有的)修饰的是能够调用的。如果你是同图片那样直接通过类名点出方法来的话是只能调用到静态方法(也就是static修饰的方法)的。没用static修饰的方法要通过类的实例才能点出来。如:MY.INIrw inirw=new MY.INIrw();Inirw.方法名称;望采纳 ...

相似回答