在方法中将对象作为参数传递
本文关键字:参数传递 对象 方法 | 更新日期: 2023-09-27 18:05:18
我正在做一个c#项目。我有一个Nameclass类与一些属性(名,姓)。在dept类中,我已经建立了Nameclass并为firstname和lastname分配了一些值。现在在深度类我调用另一个方法setValues()属于订单类。在这个方法中,我传递了这个NameClass和其他一些值。代码如下:
Order.setValues(nameObject, address, city, state,zip)
现在在秩序类当我试图访问属性从它没有显示任何属性。为什么我没有在Order类中获得姓和名的值。我是否必须在Order类中再次实例化NameClass以获得属性。如果你能告诉我我在这里做错了什么,我将不胜感激。
您没有显示您的代码,但有几种可能性,包括:
- 确保您的
setValues
方法使用正确的类型传递第一个参数,即:void setValues(NameClass name, string address, ...
,而不是使用void setValues(object name, ...
。 - 确保
NameClass
(firstname
和lastname
)的属性或字段不标记private
,而是public
(或internal
,如果你在同一个项目中)。
我认为发生这种情况的原因是因为您的Order.setValues()
方法具有以下签名:
public static void setValues(object nameObject, string address, string city, string state, string zip)
如果我的估计是正确的,那么答案很简单。您的对象被视为类型对象,而不是类型NameClass
。在编译时,你无法知道除了reflection之外基类对象中有哪些属性。
解决方案是简单地将方法中的nameObject参数的类型更改为NameClass
类型…
您要么将形参声明为类型对象,要么数据成员不是公共的。在前一种情况下,vc#无法知道对象中的成员。