2011-08-12 101 views
1

我正在开发一个C#项目。 我有一个名称类与一些属性(名字,姓氏)。 在部门类中,我已经安装了Nameclass并为一些名字和姓氏分配了一些值。 现在在dept类中,我调用属于Order类的另一个方法setValues()。 在这个方法中,我传递了这个NameClass和其他一些vlaue。代码看起来像这样。在方法中传递一个对象作为参数

Order.setValues(nameObject, address, city, state,zip) 

现在时,当我试图从 nameObject它没有表现出任何properits访问属性Order类。 为什么我在Order类中没有得到名字和姓氏值。 我是否必须在Order类中再次实例化NameClass才能获取属性。 我很感激你能否告诉我我在这里做了什么错误。

+0

我们需要看看如何定义各种类 – Jason

+0

显示你提到的类的代码 – sll

+1

这是不可能说的。然而,这里最可能的问题是'nameObject'被作为'object'或其他类型传递,而不是实际的类型。因此,无法知道它实际上具有哪些属性/字段。你应该发布你的'Order.setValues'实现,以便我们能够评估为什么发生。 – Tejs

回答

0

我认为发生这种情况的原因是因为你的Order.setValues()方法具有以下特征:

public static void setValues(object nameObject, string address, string city, string state, string zip)

如果我的估计是正确的,那么答案很简单。您的对象被视为类型对象而不是类型NameClass。在编译时你不知道什么属性在基类对象内缺少Reflextion。

解决方法是简单地将您的方法中的nameObject参数的类型更改为输入NameClass ...所有这一切都假设我的假设是正确的。

+0

谢谢。是的我的签名是错误的。我非常感谢你的帮助。这是一个很棒的论坛。 – Henry

2

你没有展示你的代码,但是有几种可能性,其中包括:

  1. 确保您setValues方法是使用正确的类型传递的第一个参数,即:void setValues(NameClass name, string address, ...,而不是使用void setValues(object name, ...
  2. 确保在NameClassfirstnamelastname)的属性或字段都没有标明private,而是将public(或internal如果在同一个项目是)。
+0

我忽略考虑选项#2 = P –

0

您已将该参数声明为类型对象,或者数据成员不是公有的。在前一种情况下,VC#无法知道您的对象中有哪些成员。

相关问题