2012-01-09 48 views
0

我想让我在其中传递的对象我做的任何实例,例如动态方法:从Object中提取值?

public class Employee() 
{ 
    public string FName; 
    public string SName; 
    .....etc. 
} 

我想的方法是这样的:

public void methodName(Object oObject) 
{ 
    //lets say that i have passed object employee to it. 
} 

是否有可能从oObject中提取任何值,我试图这样做,但它没有这样做的属性,并且当我放入手表时,我可以实际看到班级员工的所有属性。

那么有什么办法吗?

+0

你想在每个对象上的特定属性的值? – 2012-01-09 09:23:01

+0

不,我想整个对象 – ykh 2012-01-09 09:24:18

回答

1

方法有很多种。

更新:你说你想要整个对象。 Casting或接口来暴露属性是前进的方式。

,就可以把对象的具体类型:

if (oObject is Employee) 
{ 
    string name = (oObject as Employee).FName; 
} 

可以公开定义方法需要什么样的接口,然后提供类型实现的接口:

public interface IFirstName 
{ 
    string FName { get; } 
} 

public void methodName(IFirstName objectWithFirstName) 
{ 
    string name = objectWithFirstName.FName; 
} 

您可以使用dynamic并希望在运行时达到最佳效果(.NET 4):

public void methodName(dynamic oObject) 
{ 
    string name = oObject.FName; 
} 

然后有反射。

但要问的更好的问题是,这是一个好方法吗?我会对采取任何措施并对事物抱有期望的方法持怀疑态度......尽管这并不是说它不会或不应该发生。

+0

我想实现的是,不是为每个类创建SqlDataReader的方法,而是发送对象引用和过程名称,并返回填充的对象。 – ykh 2012-01-09 09:30:34

+0

@ user733659我会这样做的方式是定义一个接口,每个类实现读/写方法所要求的接口,以便每个对象实际上负责自己的读/写操作。无论是或者你使用反射和属性名称,但这可以得到一个小小的flakey。 – 2012-01-09 09:31:53

+0

你可以给我一个参考或一个小例子。谢谢。 – ykh 2012-01-09 09:39:24

1

是的,你可以访问值通过简单的类型转换对象回Employee类这样

public void methodName(Object oObject) 
    { 
     //lets say that i have passed object employee to it. 
     //if oObject belongs to Employee class 
     if(oObject is Employee) 
     { 
      Employee employee = oObject as Employee; 
      //you can get access values here 
     } 
    } 
+0

您应该只使用'as',然后用null测试员工。 'Employee employee = oObject as Employee; if(employee!= null){} – meziantou 2012-01-09 09:38:36

+0

@meziantou其实'if(oObject是Employee)'将过滤掉空值,因为空对象引用除对象外没有其他类型。 – 2012-01-09 09:43:18