.net 相似对象的通用方法
C#4.0 如果我有N个具有完全相同属性的类(实体),那么它们没有任何公共接口或公共继承 我希望该方法能够传递它们的任何实例,而无需将任何属性从一个对象复制到另一个对象。 我认为在.NET4.0中应该有几种方法来实现这一点 e、 g以某种方式使用var或dynamik关键字或泛型类型。 可能是这样的:.net 相似对象的通用方法,.net,c#-4.0,.net,C# 4.0,C#4.0 如果我有N个具有完全相同属性的类(实体),那么它们没有任何公共接口或公共继承 我希望该方法能够传递它们的任何实例,而无需将任何属性从一个对象复制到另一个对象。 我认为在.NET4.0中应该有几种方法来实现这一点 e、 g以某种方式使用var或dynamik关键字或泛型类型。 可能是这样的: public void MyMethod<MyType>(AnyType myInstance) { Type myType = typeof(T);
public void MyMethod<MyType>(AnyType myInstance)
{
Type myType = typeof(T);
myInstance = myInstance as myType;
AppendToFile(myInstance.Field1);
AppendToFile(myInstance.Field2);
}
public void MyMethod(AnyType myInstance)
{
类型myType=类型(T);
myInstance=myInstance作为myType;
AppendToFile(myInstance.Field1);
AppendToFile(myInstance.Field2);
}
现在我正在调查,可能有人对此有任何想法。如果您希望使用
动态
,您可以使用:
public void MyMethod(dynamic myInstance)
{
AppendToFile(myInstance.Field1); //note: you will get no intellisense support
AppendToFile(myInstance.Field2);
}
如果您希望使用
动态
,您可以使用:
public void MyMethod(dynamic myInstance)
{
AppendToFile(myInstance.Field1); //note: you will get no intellisense support
AppendToFile(myInstance.Field2);
}
如果您不想或无法派生它们或添加接口,则必须使用
dynamic
假设AppendToFile采用动态参数,或者Field1和Field2总是相同的类型,我相信这样做就可以了
public void MyMethod(dynamic myInstance)
{
AppendToFile(myInstance.Field1);
AppendToFile(myInstance.Field2);
}
如果您不想或无法派生它们或添加接口,则必须使用
dynamic
假设AppendToFile采用动态参数,或者Field1和Field2总是相同的类型,我相信这样做就可以了
public void MyMethod(dynamic myInstance)
{
AppendToFile(myInstance.Field1);
AppendToFile(myInstance.Field2);
}
一种方法是使用反射(不是特定于.NET 4.0):
我不得不问,是否可以更改类以实现相同的接口?一种方法是使用反射(不是特定于.NET 4.0):
我不得不问,是否可以更改类以实现相同的接口?最好的方法是更改类以仅实现接口 另一种方法是创建所需的接口,然后创建一个默认的接口实现,该接口仅包装一个动态对象并实现该接口。然后,此默认实现中的任何方法都将成为底层动态的传递 这将允许您一致地使用IMyInterface接口,而不是直接使用dynamics 例如:
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; } }
}
最好的方法是将类更改为只实现接口 另一种方法是创建所需的接口,然后创建一个默认的接口实现,该接口仅包装一个动态对象并实现该接口。然后,此默认实现中的任何方法都将成为底层动态的传递 这将允许您一致地使用IMyInterface接口,而不是直接使用dynamics 例如:
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; } }
}
尽管这是可能的,正如其他人所指出的,但我认为让他们共享一个界面确实更整洁。如果代码不是您的,但是类是部分的(就像DBML类一样),那么您可以创建部分类来指定接口实现
public分部类ClassA:IInterface{}public分部类ClassB:IInterface{}
尽管有可能,正如其他人所指出的那样,我认为让它们共享一个接口还是比较整洁的。如果代码不是您的,但是类是部分的(就像DBML类一样),那么您可以创建部分类来指定接口实现<代码>公共部分类A:IInterface{}公共部分类B:IInterface{}