在pcl中创建未初始化的对象

时间:2016-03-10 17:47:34

标签: c# portable-class-library

有没有办法在便携式类库中创建未初始化的对象?

在标准.NET Framework中,可以使用FormatterServices.GetUninitializedObject()完成此操作。

但是,此类+名称空间在mscorlib的PCL版本中不可用。有没有我不知道的替代方案?

1 个答案:

答案 0 :(得分:0)

这个答案适用于那些从谷歌来到这里并且正在询问的人,因为他们正在使用xamarin:

更新

如果pcl项目设置为netstandard 2.0,则FormatterServices.GetUninitializedObject将可用。

.Net Api reference

选中此项以查看它是否与您的运行时兼容:https://github.com/dotnet/standard/blob/master/docs/versions.md#net-standard-versions

没有.netstandard库的旧答案:

在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的。一旦我有理由改变项目类型并实施它,我就会更新。