C#4.0 如果我有N个类(实体)具有完全相同的属性,则它们没有任何公共接口或任何公共继承 我希望有方法能够传递任何实例,而不会将任何属性从一个对象复制到另一个对象。 我认为在.NET 4.0中应该有两种方法。
例如以某种方式使用var或dynamik关键字或使用泛型类型。 可能是这样的:
public void MyMethod<MyType>(AnyType myInstance)
{
Type myType = typeof(T);
myInstance = myInstance as myType;
AppendToFile(myInstance.Field1);
AppendToFile(myInstance.Field2);
}
现在我正在调查,可能有人对此有任何想法。
答案 0 :(得分:2)
如果您不想或不能派生它们或添加界面,那么您将不得不使用dynamic
我相信这样做,假设AppendToFile采用动态参数或者Field1和Field2总是相同的类型。
public void MyMethod(dynamic myInstance)
{
AppendToFile(myInstance.Field1);
AppendToFile(myInstance.Field2);
}
答案 1 :(得分:2)
最好的方法是更改类以实现接口。
另一种方法是创建所需的接口,然后创建仅包装动态对象并实现接口的接口的默认实现。然后,此默认实现中的任何方法都将成为基础动态的传递。
这将允许您始终使用IMyInterface界面,而不是直接使用动态。
例如:
public interface IMyInterface
{
string Field1 { get; }
string Field2 { get; }
}
public class MyDefaultInterface : IMyInterface
{
private Dynamic _dynamic;
public MyDefaultInterface(dynamic target)
{
_dynamic = target;
}
public string Field1 { get { return _dynamic.Field1; } }
public string Field2 { get { return _dynamic.Field2; } }
}
答案 2 :(得分:1)
如果您要使用dynamic
,可以使用此功能:
public void MyMethod(dynamic myInstance)
{
AppendToFile(myInstance.Field1); //note: you will get no intellisense support
AppendToFile(myInstance.Field2);
}
答案 3 :(得分:0)
一种方法是使用反射(不是特定于.NET 4.0):
object field1Value = myType.GetField("Field1").GetValue(myInstance);
我不得不问,是不是可以改变类来实现相同的接口?