Мы можем получить доступ к частной переменной, используя объект
Мы не можем получить доступ к частной переменной класса из объекта, который создается вне класса, но можно получить доступ, когда тот же самый объект создается внутри самого класса. почему??
class Program
{
private int i;
public void method1()
{
Program p = new Program();
p.i = 5; // OK when accessed within the class
}
}
class AnotherClass
{
void method2()
{
Program p = new Program();
p.i = 5; //error because private variables cannot be accessed with an object which is created out side the class
}
}
Теперь я думаю, что каждый получил свою точку зрения
В обоих случаях выше мы получаем доступ к частной переменной "i" через объект "p". Но внутри класса разрешено, вне класса не допускается. Может ли кто-нибудь сказать мне причину этого?
Ответы
Ответ 1
Вы можете получить доступ к я из класса, потому что доступ к частным членам может получить только члены класса. В этом случае это выглядит странно, потому что p - это другой объект, чем объект, который обращается к переменной, но его все тот же класс и ограничение находятся на уровне класса, а не на уровне объекта.
class Program
{
private int i;
public void method1()
{
Program p = new Program();
p.i = 5; // OK when accessed within the class
}
}
Вы не можете получить доступ к я из другого класса (если это не внутренний класс, а другой). Это полностью соответствует ожиданиям.
class AnotherClass
{
void method2()
{
Program p = new Program();
p.i = 5; //error because private variables cannot be accessed with an object which is created out side the class
}
}
Я понимаю, что вы хотите сделать. Ограничение уровня класса выглядит интуитивно. И, возможно, это неправильно. Но переменные-члены все еще доступны только внутри класса, поэтому у вас все еще есть полный контроль, гарантирующий инкапсуляцию ваших рядовых.
Ответ 2
почему??
Это соответствует спецификации языка. Модификатор доступа private
имеет семантику, которой разрешено только объявление class
или struct
объявить член.
Я предлагаю прочитать спецификацию для деталей. В частности, проверьте
§3.5.1 Объявленная доступность
§3.5.4 Ограничения доступности
§10.2.3 Модификаторы доступа
§10.2.6.2 Объявленная доступность
§10.2.6.5 Доступ к закрытым и защищенным членам содержащего типа
Ответ 3
В обоих случаях выше мы получаем доступ к частной переменной "i" через объект "p". Но внутри класса разрешено, вне класса не допускается. Может ли кто-нибудь сказать мне причину этого?
Поскольку модификаторы доступа не относятся к объекту, они относятся к классу (или > , для модификатора internal
).
Даже если вы обращаетесь к нему из другого объекта или статического контекста, пока вы остаетесь в одном классе, доступ к члену private
будет работать. Это личное для класса, а не его экземпляры.
Ответ 4
Возможно, вы запутались в объекте и классе, public/private/protected/internal влияют на видимость класса, а не на видимость объекта. Это означает, что объект класса может обращаться к атрибутам другого объекта того же класса, даже если они являются частными.
Я не уверен, что правильно понял ваш вопрос...
Ответ 5
если доступ за пределами класса является необходимым параметром, а затем попробуйте свойства.
Ответ 6
Это относится к OOP. Ответ был бы потому, что его частный, иначе, если бы все частные переменные были доступны извне класса, концепция объекта не имела бы никакого смысла.
Ответ 7
Вы также можете получить доступ к приватным переменным в следующем процессе...
namespace OOPSProj
{
class Program
{
private int i;
public void Methode1()
{
Program objprog2 = new Program();
objprog2.i = 15;
Console.WriteLine("i= " + objprog2.i);
}
static void Main(string[] args)
{
Program objprog = new Program();
objprog.i = 10;
Console.WriteLine("i= " + objprog.i);
objprog.Methode1();
}
}
class Test
{
static void Main()
{
Program objproj3 = new Program();
objproj3.Methode1();
}
}
}