Sto leggendo il primo libro c # e non capisco cosa significhi. "Qualsiasi classe può visualizzare campi privati in altre istanze della stessa classe"
Sto leggendo il primo libro c # e non capisco cosa significhi. "Qualsiasi classe può visualizzare campi privati in altre istanze della stessa classe"
Considera queste classi:
class A
{
private int foo;
public A(int f) { this.foo = f; }
// works
public int AddTo(A other) { return this.foo + other.foo; }
// doesn't work: 'B.bar' is inaccessible due to its protection level
public int AddTo(B other) { return this.foo + other.bar; }
}
class B
{
public B(int b) { this.bar = b; }
private int bar;
}
var a1 = new A(123);
var a2 = new A(456);
var result = a1.AddTo(a2);
Qui, l' a1 istanza di A accede a a2 privato foo valore. il risultato sarà 579.
Tuttavia, il secondo metodo, AddTo(B) non funziona, non verrà nemmeno compilato poiché le istanze di A non hanno accesso a B di istanze di membri privati.
var b = new B(789);
var result2 = a1.Add2(b);
Qui a1 tenta di accedere al membro b privato di bar , ma poiché a1 è un'istanza di A e b è un'istanza di B , la percentuale privata di quest'ultimo il membro dibar non è accessibile.
Se la classe Foo ha un membro privato, come
public class Foo
{
private int _bar;
}
Quindi _bar è accessibile da qualsiasi istanza di Foo .
public class Foo
{
private int _bar;
public bool MatchesOtherFoo(Foo other)
{
return _bar == other._bar;
}
}
Non hai potuto accedere a _bar da un'altra classe, ma puoi accedervi da altre istanze della stessa classe.
Leggi altre domande sui tag encapsulation c#