w1r*_*res 3 c# objectinstantiation
我有一个类,我声明一个对象,但不初始化该对象.然后我将对象传递给另一个类中的方法进行初始化.我期望发生的是调用类中的对象现在将具有对初始化对象的引用,但它是null.
这是我的意思的一个例子:
class MainClass
{
ObjectA foo;
OtherClass.InitializeObjectA(foo);
// why is foo null over here?
}
class OtherClass
{
public static void InitializeObjectA(ObjectA device)
{
device = new ObjectA();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我在调用InitializeObjectA()它之后尝试使用foo时仍然指向null!如果我改变InitializeObjectA()到out ObjectA device它的工作原理.任何人都可以解释为什么需要它?
如果你想要这个,你需要通过引用传递:
public static void InitializeObjectA(ref ObjectA device)
{
Run Code Online (Sandbox Code Playgroud)
要么:
public static void InitializeObjectA(out ObjectA device)
{
Run Code Online (Sandbox Code Playgroud)
如果没有这个,InitializeObjectA请将device参数设置为a new ObjectA(),但这不会影响调用者,因为默认情况下,引用按值传递.
请注意,如果您只是尝试初始化,则返回实例而不是void通常是处理此问题的更好方法:
public static ObjectA InitializeObjectA()
{
return new ObjectA();
}
Run Code Online (Sandbox Code Playgroud)
这避免了使用ref或out传递的需要.
| 归档时间: |
|
| 查看次数: |
1150 次 |
| 最近记录: |