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#