C#为什么将类实例传递给一个接受对象作为参数的方法并将其装箱回去 例如,让我们考虑下面的例子。 class A { int i; string j; double t; } A a =new A(); MethodCalled(a); void Method(object a) { A newA = a as A; // This will work even though Class A is down casted to System.Object }
有人能帮我理解这一点吗。链接引用到解释C#为什么将类实例传递给一个接受对象作为参数的方法并将其装箱回去 例如,让我们考虑下面的例子。 class A { int i; string j; double t; } A a =new A(); MethodCalled(a); void Method(object a) { A newA = a as A; // This will work even though Class A is down casted to System.Object },c#,object,parameter-passing,C#,Object,Parameter Passing,有人能帮我理解这一点吗。链接引用到解释 谢谢我没有看到拳击比赛。装箱是指将值类型(例如int)转换为引用类型。在您的示例中,传递给方法的值是引用类型(class a)。拳击比赛的链接: 因此,当您调用Method(或者MethodCalled,我假设这是一个输入错误)时,所发生的一切就是该方法正在接受类型为class a的参数,因为它是一个对象。所有引用类型都派生自对象 我认为您的问题实际上可以归结为“as”操作符做什么?”这行代码: A newA = a as A; 逻辑上转换为以下伪代码
谢谢我没有看到拳击比赛。装箱是指将值类型(例如int)转换为引用类型。在您的示例中,传递给方法的值是引用类型(
class a
)。拳击比赛的链接:
因此,当您调用Method
(或者MethodCalled
,我假设这是一个输入错误)时,所发生的一切就是该方法正在接受类型为class a
的参数,因为它是一个对象。所有引用类型都派生自对象
我认为您的问题实际上可以归结为“as”操作符做什么?”这行代码:
A newA = a as A;
逻辑上转换为以下伪代码:
A newA = null;
if (a can be cast to type A)
newA = a;
因此,您可以看到“as”操作符将正确设置newA,因为参数的类型实际上是class A。如果您传递了另一个类型为class B
的对象,as操作符将返回null(假设class B
不是从class A
派生的)。这里有一个与as操作符示例相关的链接,这可能有助于更好地解释:
我看不到拳击比赛在进行。装箱是指将值类型(例如int)转换为引用类型。在您的示例中,传递给方法的值是引用类型(class a
)。拳击比赛的链接:
因此,当您调用Method
(或者MethodCalled
,我假设这是一个输入错误)时,所发生的一切就是该方法正在接受类型为class a
的参数,因为它是一个对象。所有引用类型都派生自对象
我认为您的问题实际上可以归结为“as”操作符做什么?”这行代码:
A newA = a as A;
逻辑上转换为以下伪代码:
A newA = null;
if (a can be cast to type A)
newA = a;
因此,您可以看到“as”操作符将正确设置newA,因为参数的类型实际上是class A。如果您传递了另一个类型为class B
的对象,as操作符将返回null(假设class B
不是从class A
派生的)。这里有一个与as操作符示例相关的链接,这可能有助于更好地解释: