C# 我应该在哪里放置在类型之间转换的功能?

C# 我应该在哪里放置在类型之间转换的功能?,c#,.net,oop,c#-4.0,C#,.net,Oop,C# 4.0,我在一个应用程序中有两个实例,需要实现将对象从一种类型转换为另一种类型的功能。一个从域对象转到另一个域对象,另一个从域对象转到XmlDocument 我最初设置它的方式是在DomainObject1和DomainObject2中分别包含ToXml()和ToMyOtherDO() ToXml中的功能实际上并不特定于DomainObject1的实现,可能存在于任何地方ToMyOtherDO()的功能非常特定于它所处的类型。两者都执行类型转换,但差异很大 我的问题是,我是否将此功能放在了正确的位置?这

我在一个应用程序中有两个实例,需要实现将对象从一种类型转换为另一种类型的功能。一个从域对象转到另一个域对象,另一个从域对象转到XmlDocument

我最初设置它的方式是在
DomainObject1
DomainObject2
中分别包含
ToXml()
ToMyOtherDO()

ToXml
中的功能实际上并不特定于
DomainObject1
的实现,可能存在于任何地方
ToMyOtherDO()
的功能非常特定于它所处的类型。两者都执行类型转换,但差异很大


我的问题是,我是否将此功能放在了正确的位置?这个功能放在助手类中会更好吗?或者其他地方-可能会覆盖显式强制转换操作符?

我通常喜欢将这种功能放入

编辑:解释
我通常更喜欢将这种功能放在扩展方法中,因为我不认为需要“转换”的类真的需要知道如何进行转换。这提供了一些解耦。您可以轻松地更改XML的格式,而无需更改要转换为XML的对象(当要转换的对象位于单独的程序集中时尤其有用)。

您最终会遇到这样一种情况:您希望将域对象转换为它实际上不需要知道的内容。例如,可能需要将域对象转换为
JObject
。如果使用扩展方法在单独的程序集中处理转换,则包含域对象的程序集不需要对库的引用。

扩展方法非常好,尤其是在处理实体框架时。实体类的代码是自动生成的,因此不能只向类中添加
ToXML()
ToJObject()



这些只是我的首选项,我并不总是使用扩展方法来处理此类功能。它只是你的武器库中另一个很好的工具,用来解决这类问题。

我将它作为扩展方法放在一个静态类中。通过这种方式,您可以像调用实例方法一样调用它,但它不会使域对象的代码变得混乱。

如果函数不是特定于对象的,那么
ToXml()
函数应该放在helper类中

我建议将ToMyOtherDO()实现为类的扩展方法,因为它是特定于类的

public void ToMyOtherDo(this MyClass object1)
{
    //Do stuff to object1
}

然后,您将能够调用
myobject.ToMyOtherDo()
(将myobject视为MyClass对象)

如果
ToXml
不是类型特定的,我将按照blachniet和其他人的建议执行,并将其放在扩展方法中


如果
ToMyOtherDO
只使用公共成员,那么扩展方法就是一个很好的地方。但是,如果
ToMyOtherDO
需要private成员,那么它必须是它所转换的类型。

我认为
ToXml()
ToMyOtherDO()
没有任何错误,并将以相同的方式执行。此方法的返回类型为void。无法获取转换的对象。这可能会返回
DomainObject2
这只是一个示例,Sio可以根据自己的喜好调整函数。您能解释一下为什么您更喜欢将其放在扩展方法中,而不是直接放在DO中吗?有什么好处?包含EM的类是特定于此DO的,还是也可以包含其他类的任意EMs?我真的很想听听你的意见。