在方法中将对象作为参数传递

本文关键字:参数传递 对象 方法 | 更新日期: 2023-09-27 18:05:18

我正在做一个c#项目。我有一个Nameclass类与一些属性(名,姓)。在dept类中,我已经建立了Nameclass并为firstname和lastname分配了一些值。现在在深度类我调用另一个方法setValues()属于订单类。在这个方法中,我传递了这个NameClass和其他一些值。代码如下:

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

现在在秩序类当我试图访问属性从它没有显示任何属性。为什么我没有在Order类中获得姓和名的值。我是否必须在Order类中再次实例化NameClass以获得属性。如果你能告诉我我在这里做错了什么,我将不胜感激。

在方法中将对象作为参数传递

您没有显示您的代码,但有几种可能性,包括:

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

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

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

如果我的估计是正确的,那么答案很简单。您的对象被视为类型对象,而不是类型NameClass。在编译时,你无法知道除了reflection之外基类对象中有哪些属性。

解决方案是简单地将方法中的nameObject参数的类型更改为NameClass类型…

您要么将形参声明为类型对象,要么数据成员不是公共的。在前一种情况下,vc#无法知道对象中的成员。