Modificatori di accesso

È possibile applicare restrizioni a classi e strutture in modo tale che siano utilizzabili solo dal programma o dallo spazio dei nomi in cui sono dichiarate. È possibile applicare restrizioni ai membri delle classi in modo tale che possano essere utilizzati solo dalle classi derivate oppure solo dalle classi incluse nello spazio dei nomi o nel programma corrente. I modificatori di accesso sono parole chiave aggiunte alla classe, alla struttura o alla dichiarazione dei membri per specificare tali restrizioni. Tali parole chiave sono public, private, protected e internal.

Accessibilità di classi e strutture

Le classi e le strutture non nidificate in altre classi o strutture possono essere pubbliche o interne. Qualsiasi altro tipo può accedere a un tipo dichiarato come pubblico. L’accesso a un tipo dichiarato come interno è invece consentito solo ai tipi all’interno dello stesso assembly. Per impostazione predefinita, le classi e le strutture vengono dichiarate come interne, a meno che alla definizione della classe non venga aggiunta la parola chiave public. Nelle definizioni di classi o strutture è possibile aggiungere la parola chiave internal per rendere esplicito il relativo livello di accesso. I modificatori di accesso non influiscono sulla classe o sulla struttura, che conserva sempre l’accesso a se stessa e a tutti i relativi membri.

Accessibilità a membri di classi e strutture

I membri di classi o strutture possono essere dichiarati tramite uno dei cinque tipi di accesso disponibili. Analogamente alle classi e alle strutture, possono essere pubblici o interni. Il membro di una classe può essere dichiarato come protetto utilizzando la parola chiave protected, per indicare che è accessibile solo ai tipi derivati che utilizzano la classe come base. Combinando le parole chiave protected e internal, il membro di una classe può essere contrassegnato come interno protetto, ossia accessibile solo ai tipi derivati o ai tipi all’interno dello stesso assembly. Infine, il membro di una classe o di una struttura può essere dichiarato come privato utilizzando la parola chiave private, per indicare che l’accesso a tale membro è consentito solo alla classe o alla struttura che lo dichiara.

Le classi

C# è un linguaggio fortemente tipizzato, quindi si può presumere che una classe è il tipo di dati più potente in C#. Analogamente alle strutture, una classe definisce i dati e il comportamento del tipo di dati. I programmatori possono quindi creare oggetti che sono istanze della classe. A differenza delle strutture, le classi supportano tutti i paradigmi della programmazione orientata agli oggetti, quindi: ereditarietà, polimorfismo e incapsulamento.
Per definire una classe bisogna utilizzare la parola chiave class preceduta dal livello di accesso:


public class MyClass
{
    public void Metodo();
}

Tra parentesi graffe vi è il corpo della classe, in cui vengono definiti il comportamento e i dati. I campi, le proprietà, i metodi e gli eventi di una classe vengono collettivamente definiti membri della classe.

Anche se a volte vengono utilizzati in modo interscambiabile, classi e oggetti sono differenti. Una classe definisce un tipo di oggetto, ma non l’oggetto stesso. Un oggetto è un’entità concreta basata su una classe e viene a volte definito istanza di una classe.
Per creare un’istanza della classe MyClass definita in precedenza dobbiamo utilizzare la parola chiave new; nel caso in cui si ometta, abbiamo visibilità solo ed esclusivamente dei metodi statici della classe.


MyClass _myclass = new MyClass(); // creata istanza
_myclass.Metodo();

MyClass.GetType(); // utilizzo metodo statico

Enterprise Library 3.1 : Data Application Block

La Enterprise Library, la libreria curata da Microsoft Patterns & Practices è realizzata sfruttando le migliori pratiche di sviluppo e i principali design pattern architetturali.
L’Enterprise Library include una serie di application block, ognuno dei quali è pensato per fornire un set specifico di funzionalità di uso frequente nell’ambito delle applicazioni di tipo enterprise.
Uno degli application block è quello che riguarda l’accesso ai dati. Esso implementa una serie classi che danno l’opportunità di implementare un strato di accesso ai dati assolutamente indipendente dagli strati superiori (è possibile soltanto nella versione implementata per il framework 2.0 che trovate qui (rilasciata a maggio 2007), nella versione per il framework 1.1 si doveva creare un’istanza della classe Database nel presentation layer).
Per l’utilizzo del DAAB si devo seguire due operazioni molto semplici:

  1. Referenziare gli assembly Microsoft.Practices.EnterpriseLibrary.Common.dll e Microsoft.Practices.EnterpriseLibrary.Data.dll nello strato di accesso ai dati;
  2. Inserire nella configurazione dell’applicazione i seguenti nodi :
    <configSections>

    <section name=”dataConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data”/>

    </configSections><dataConfiguration defaultDatabase=”default“/>

     <connectionStrings>
     <add name=”defaultproviderName=”System.Data.SqlClientconnectionString=”Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True“/>
    </connectionStrings>

Esempio Framework 2.0.


namespace MyApp.Data
{
    public class DataAccess
    {
        internal static Database intAppData = null;

        static DataAccess()
        {
             intAppData = DatabaseFactory.CreateDatabase();
        }

        public static IDataReader GetDataFromDb(params object [] values)
        {
             return intAppData.ExecuteReader (“StoreProc“, values);
        }
    }
    …
}