有没有办法在便携式类库中创建未初始化的对象?
在标准.NET Framework中,可以使用FormatterServices.GetUninitializedObject()完成此操作。
但是,此类+名称空间在mscorlib的PCL版本中不可用。有没有我不知道的替代方案?
答案 0 :(得分:0)
这个答案适用于那些从谷歌来到这里并且正在询问的人,因为他们正在使用xamarin:
如果pcl项目设置为netstandard 2.0,则FormatterServices.GetUninitializedObject将可用。
选中此项以查看它是否与您的运行时兼容:https://github.com/dotnet/standard/blob/master/docs/versions.md#net-standard-versions
在pcl中的用法:
DependencyService.Get<IObjectFactory>().CreateUninitialized(typeof(MyType));
pcl定义:
public interface IObjectFactory
{
object CreateUninitialized(Type type);
}
机器人:
[assembly: Xamarin.Forms.Dependency(typeof(ObjectFactory))]
namespace YOURNAMESPACE
{
public class ObjectFactory : IObjectFactory
{
public object CreateUninitialized(Type type)
{
return FormatterServices.GetUninitializedObject(type);
}
}
}
IOS:
[assembly: Xamarin.Forms.Dependency(typeof(ObjectFactory))]
namespace YOURNAMESPACE
{
public class ObjectFactory : IObjectFactory
{
public object CreateUninitialized(Type type)
{
return FormatterServices.GetUninitializedObject(type);
}
}
}
WP:
同样的方法在这里还没有用。可能是因为我的项目是WP8.1 Silverlight的。一旦我有理由改变项目类型并实施它,我就会更新。