我想将BusinessObjects从一台PC转移到另一台PC.如果我想到大约40种不同的对象类型要转移,那么对于不同的对象使用许多合同似乎总是相同的任务有一些重载:"将对象A发送到计算机B并将对象保存到数据库"(对象都有持久的方法).
由于Objects可以有许多不同的类型,我只想使用泛型方法:
目前我正在考虑将类型作为eytra信息发送.然后我想做类似的事情:
BinaryFormatter aFormatter = new BinaryFormatter();
aFormatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
Object.ParseTypeFromString(aObjektType) aObject = aFormatter.Deserialize(stream) as Object.ParseTypeFromString(aObjektType);
Run Code Online (Sandbox Code Playgroud)
然后,只使用基础对象中的泛型方法将对象保存到数据库,以使传输类尽可能简单.
有没有可能做这样的事情?或者我是在一个完全错误的方向,用另一种方法更容易实现这个任务?
如果你不提前知道的类型,你不能现在做的是取决于类型的C#东西.BinaryFormatter将已经用正确的对象类型反序列化,但你的代码通常可以只参照对象.... object:
object aObject = aFormatter.Deserialize(stream);
Run Code Online (Sandbox Code Playgroud)
此时,您可以使用各种选项:
dynamic(有趣的用途dynamic包括调用方法的最合适的重载,并切换到泛型方法)is,as或者GetType(),对于特殊套管,明确地测试类型作为中间选项的示例:
object aObject = aFormatter.Deserialize(stream);
GenericMagic((dynamic)aObject);
OverloadMagic((dynamic)aObject);
...
void GenericMagic<T>(T obj) // possibly some constraints here too
{
T x = ... // now we *have* the type, but as `T`;
// of course, you still can't do many exciting
// things unless you add constraints
}
// the correct one of these will be chosen at runtime...
void OverloadMagic(Customer cust) {...}
void OverloadMagic(User user) {...}
void OverloadMagic(Order order) {...}
Run Code Online (Sandbox Code Playgroud)
坦率地说,如果我不得不反序列化(等)一些未知的东西,我通常宁愿保持非泛型,只是使用object,GetType()也许还有一些反思 - 它仍然是通用的,即使它不使用泛型.
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |