属性 在私有接口下总是 returns 零

Property under private interface always returns zero

我有一个 属性 的私有接口,因此只有它的所有者 class 可以创建或读取它,但是当我分配给它时,它只是保持为零。

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; }
}

编辑:我也很好奇为什么在转换时赋值不起作用。

您不应在设置值之前将 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

这是更简单的解决方案

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();
    }
}