以下是不可能的,是否有特定原因?
class ClassOfInts : IHaveInts
{
public MyInt IntHolder { get; }
// This solves my use case but i'm unsure why this is necessary
// IInt IHaveInts.IntHolder { get => IntHolder; }
}
interface IHaveInts
{
IInt IntHolder { get; }
}
class MyInt : IInt
{
public int TheInt { get; }
}
interface IInt
{
int TheInt { get; }
}
Run Code Online (Sandbox Code Playgroud)
我认为上面的代码成功地实现了 IHaveInts,因为 MyInt 实现了 IInt。
我一直在尝试以这样的方式序列化和反序列化我的对象,以便我能够指定要序列化但不反序列化某些属性。
示例代码如下:
public interface ISupYo
{
string Hi { get; }
}
public class SupYo : ISupYo
{
public string Hi { get; } = "heya";
}
public interface ISup
{
int hiyo { get; }
}
public class Sup : ISup
{
public Sup(int hiyo)
{
this.hiyo = hiyo;
}
public int hiyo { get; }
public ISupYo yo => new SupYo();
}
var myNewSup = JsonConvert.SerializeObject(new Sup(2));
var mySup = JsonConvert.DeserializeObject<Sup>(myNewSup);
Run Code Online (Sandbox Code Playgroud)
如果我从类中删除构造函数,Sup一切都很好。
但是由于 json.net 尝试构建接口 ISupYo,原样反序列化失败并出现以下错误... …
根据此处的讨论,在互联网上的某个地方,已验证在枚举某些类型的集合时替换它们是可能的/线程安全的。
我下面的测试似乎证实了这一点。
// This test confirmed insufficient by comments
var a = new List<int> { 1, 2, 3 };
Parallel.For(1, 10000, i => {
foreach (var x in a)
Console.WriteLine(i + x);
});
Parallel.For(1, 10000, i => a = new List<int> { 1, 2, 3, 4 });
Run Code Online (Sandbox Code Playgroud)
然而,在我开始在代码中实现它之前,我非常想阅读一些官方文档或与此事实相关的一些具体参考资料。
有人可以验证这一点/发布链接吗?