Perché devo rendere privato il metodo della mia classe, se devo accedervi tramite la mia applicazione?

1

Sto seguendo il tutorial per principianti per C # da un sito web link Nel capitolo delle classi, rende il metodo di classe privato e quindi usa la proprietà per ottenere e impostare i valori. Non riesco a capire perché ho bisogno di creare qualcosa di privato nella mia classe se devo riutilizzarlo / riutilizzarlo durante i progetti?

Non sto chiedendo getter e setter, sono più preoccupato del motivo per cui ho bisogno di usare la parola chiave Private se tutte le cose funzionano bene con Public nell'esempio di esercitazione.

    
posta wsDev 13.05.2015 - 10:24
fonte

4 risposte

0

La ragione più importante per limitare l'accesso pubblico è ridurre l'accoppiamento nella tua applicazione. Esponendo solo un insieme selezionato di metodi o proprietà pubbliche, si limita il numero di connessioni tra diverse classi.

C'è una diffusa confusione su questo, dove molte persone credono che lo scopo del modificatore di accesso privato sia quello di impedire ad altre classi di violare accidentalmente la classe o i dati, come un qualche tipo di sicurezza o protezione dei dati. Questo è tutt'al più un beneficio molto minore in rare circostanze.

Il vero scopo è ridurre l'accoppiamento, che a sua volta rende più facile apportare modifiche al codice in un secondo momento. Leggi su Incapsulamento, Indiretta, Responsabilità singola

    
risposta data 14.05.2015 - 20:20
fonte
6

L'autore ha fornito un semplice esempio che, per la sua semplicità, potrebbe rendere più difficile comprendere l'importanza dei metodi privati.

I metodi privati sono un modo in cui puoi incapsulare e abbattere il comportamento di un dato oggetto senza esporlo all'esterno.

Diciamo che abbiamo un oggetto di tipo Person :

public class Person 
{
     public string Name {get; set;}
     public int Age {get; set;}
}

In quanto sopra, non c'è nulla che mi impedisca di creare una persona con un'età negativa:

Person p = new Persion() {Name = "Bob", Age = -1}

Potrei avere un metodo per garantire che l'età sia compresa in un intervallo di intervalli stabiliti.

public class Person
{
    private int age;

    public string Name {get; set;}
    public int Age {get {return this.age}; set {this.ValidateAge(value);}

    public void ValidateAge(int age) { if(age > 0) this.age = age; }
}

Il problema ora è che ho un metodo ValidateAge esposto a chi ha mai consumato la classe Person . Questo espone un meccanismo interno della classe e fornisce anche un modo a qualcuno di modificare i dati interni della classe senza passare attraverso la proprietà appropriata, interrompendo così l'incapsulamento.

Rendere il metodo privato lo nasconderà ai chiamanti esterni, offrendo così un controllo migliore su come e quando vengono modificate le proprietà.

    
risposta data 13.05.2015 - 10:40
fonte
3

Il tutorial sta cercando di insegnarti l'incapsulamento.

L'incapsulamento è una parte importante della programmazione orientata agli oggetti. È una tecnica che i programmatori usano per mantenere i loro grandi basi di codice puliti e facili da usare. In sostanza, significa che qualsiasi cosa può essere lasciata come un'implementazione privata di una classe dovrebbe essere lasciata privata. Questo riduce la "superficie pubblica" della tua classe e aiuta a mantenere le tue responsabilità applicative isolate in singole classi.

Puoi leggere su questo su wikipedia:

risposta data 13.05.2015 - 10:40
fonte
0

Il tutorial sembra dimostrare ciò che puoi fare, non dando esempi di cosa dovresti fare.

Specificamente in questo caso, il loro uso di proprietà significa b.MyProperty di seguito non equivale a "Bob" , il che fallirebbe la revisione del codice in qualsiasi negozio in cui ho lavorato.

HappyBirthday a = new HappyBirthday();

a.MyProperty = "Bob";

a.MyProperty = a.MyProperty;

HappyBirthday b = new HappyBirthday();

b.MyProperty = a.MyProperty;
    
risposta data 13.05.2015 - 10:40
fonte

Leggi altre domande sui tag