私有接口下的属性始终返回零

时间:2019-05-07 13:12:57

标签: unity3d interface properties private

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

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

编辑:我也很好奇为什么投射时分配不起作用的原因。

2 个答案:

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