我有一个用于属性的私有接口,因此只有其所有者类可以创建或读取它,但是当我分配给它时,它保持为零。
var key = new Key();
((IKey)key).Value = 9;
Debug.Log(((IKey)key).Value);
输出:0
private interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
int IKey.Value { get; set; }
}
编辑:我也很好奇为什么投射时分配不起作用的原因。
答案 0 :(得分:1)
在设置值之前,请勿将key
强制转换为IKey
。它已经继承了该类型,并且您正在掩盖Value
中设置的Key
属性。顺便说一句,在这种情况下,我更喜欢使用强类型而不是使用var
进行弱类型。见下文:
namespace Console
{
interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
public int Value { get; set; }
}
class Program
{
static void Main()
{
var key = new Key();
((IKey)key).Value = 9;
var secondKey = new Key();
secondKey.Value = 9;
var thirdKey = new Key();
thirdKey.Value = 9;
System.Console.WriteLine($"key = {((IKey)key).Value}");
System.Console.WriteLine($"secondKey = {((IKey)secondKey).Value}");
System.Console.WriteLine($"thirdKey = {thirdKey.Value}");
System.Console.ReadLine();
}
}
}
key = 0
secondKey = 9
thirdKey = 9
答案 1 :(得分:-1)
这是更简单的解决方案
class Program
{
private interface IKey
{
int Value { get; set; }
}
public struct Key : IKey
{
int IKey.Value { get; set; }
}
static void Main()
{
IKey key = new Key();
key.Value = 7;
System.Console.WriteLine($"key = {key.Value}");
System.Console.ReadLine();
}
}