我正在编写一个原型TCP连接,我在整理要发送的数据时遇到了一些麻烦.
目前,我只发送字符串,但将来我们希望能够发送任何对象.
目前代码非常简单,因为我认为所有内容都可以转换为字节数组:
void SendData(object headerObject, object bodyObject)
{
byte[] header = (byte[])headerObject; //strings at runtime,
byte[] body = (byte[])bodyObject; //invalid cast exception
// Unable to cast object of type 'System.String' to type 'System.Byte[]'.
...
}
Run Code Online (Sandbox Code Playgroud)
这当然很容易用a来解决
if( state.headerObject is System.String ){...}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我这样做,我需要检查在运行时无法转换为byte []的每种类型的对象.
由于我不知道在运行时无法将每个对象强制转换为byte [],因此这不是一个选项.
如何将任何对象转换为C#.NET 4.0中的字节数组?
我知道,你可以直接调用一个类型的静态构造函数和我知道,你可以在不调用构造函数创建一个对象的实例,但有一种方式来运行一个类型(构造.ctor)上已经存在的实例?
我正在寻找类似的东西:
public static void Reinitialize<T>(T instance)
{
var initializer = typeof(T).GetHiddenConstructorThatDoesntNew(typeof(int), typeof(string));
// call the constructor (int, string) on instance
initializer.Invoke(instance, 7, "Bill");
}
Run Code Online (Sandbox Code Playgroud)
我知道我永远不应该真的需要这样做,我更想知道是否有可能在已经创建的对象上重新调用构造函数/初始化程序.
这可能是一个愚蠢的问题,但无论如何我都会问它......我正在用C#.NET编程.我有一个包含非静态实例EventHandler的类.是否可以为静态方法中存在的类的每个实例触发该EventHandler?我知道这是一个很长的镜头!