Campi privati e incapsulamento

1

Sto leggendo il primo libro c # e non capisco cosa significhi. "Qualsiasi classe può visualizzare campi privati in altre istanze della stessa classe"

    
posta Amran Ahmed 18.06.2016 - 18:28
fonte

2 risposte

4

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.

    
risposta data 18.06.2016 - 18:51
fonte
0

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.

    
risposta data 22.06.2016 - 20:57
fonte

Leggi altre domande sui tag