Свойство в частном интерфейсе всегда возвращает ноль - PullRequest
0 голосов
/ 07 мая 2019

У меня есть частный интерфейс для свойства, так что только его владелец может создавать или читать его, но когда я присваиваю ему, оно просто остается равным нулю.

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 ]

1 голос
/ 07 мая 2019

Вы не должны приводить 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
0 голосов
/ 07 мая 2019

Это более простое решение

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