Доступ к закрытому члену параметра внутри статического метода? - PullRequest
15 голосов
/ 27 октября 2009

Как можно скомпилировать этот код? Код ниже в операторе int МОЖЕТ получить доступ к закрытой переменной класса MyValue? Почему?

class Program
{
    static void Main(string[] args)
    {
        Myvalue my = new Myvalue(100);
        Console.WriteLine(my + 100);
        Console.Read();
    }
}


public class Myvalue
{
    private int _myvalue;

    public Myvalue(int value)
    {
        _myvalue = value;
    }

    public static implicit operator int(Myvalue v)
    {
        return v._myvalue;
    }
}

Ответы [ 3 ]

19 голосов
/ 27 октября 2009

Поскольку он находится в классе, он имеет доступ к закрытым переменным. Так же, как ваш экземпляр публичных методов. Это работает и наоборот. Вы можете получить доступ к закрытым статическим членам из элементов экземпляра, чтобы создать шаблон Monostate.

15 голосов
/ 27 октября 2009

private означает приватный для класса и не приватный для экземпляра.

5 голосов
/ 27 октября 2009

operator int () по-прежнему является функцией-членом класса MyValue и поэтому может обращаться ко всем полям объектов типа MyValue.

Обратите внимание, что static просто означает, что объект MyValue необходимо передать функции в качестве параметра.

...