Nozioni fondamentali sulle classi (confronto tra C# e Java)

Aggiornamento: novembre 2007

Nelle sezioni che seguono vengono messi a confronto i modificatori di C# e Java.

Modificatori di accesso

I modificatori di C# sono molto simili a quelli di Java, con alcune piccole differenze. Ogni membro di una classe, o la classe stessa, può essere dichiarato con un modificatore di accesso per definire l'ambito dell'accesso consentito. Le classi che non vengono dichiarate all'interno di altre classi possono specificare solo i modificatori public o internal. Le classi nidificate, come altri membri di classe, possono specificare indifferentemente i cinque modificatori di accesso riportati di seguito:

  • public

    Visibile a tutti.

  • protected

    Visibile solo dalle classi derivate.

  • private

    Visibile solo all'interno della classe specificata.

  • internal

    Visibile solo all'interno dello stesso assembly.

  • protected internal

    Visibile solo all'assembly corrente o ai tipi derivati dalla classe che lo contiene.

Modificatori public, protected e private

Un modificatore public rende il membro disponibile ovunque, sia all'interno che all'esterno della classe. Un modificatore protected indica che l'accesso è limitato alla classe che lo contiene o alle classi da essa derivate. Un modificatore private indica che l'accesso è possibile solo dal tipo che lo contiene. In C# il modificatore di accesso predefinito è private, mentre in Java viene utilizzato come accesso predefinito qualsiasi punto del package che lo contiene.

Modificatore internal

Un elemento internal è accessibile solo dall'assembly corrente. Un assembly di .NET Framework corrisponde in pratica a un file JAR di Java e rappresenta i blocchi predefiniti utilizzati per la costruzione di altri programmi.

Modificatore protected internal

Un elemento protected internal è visibile solo all'assembly corrente o ai tipi derivati dalla classe che lo contiene.

Modificatore sealed

Una classe con il modificatore sealed nella relativa dichiarazione è esattamente l'opposto di una classe astratta, in quanto non può essere ereditata. È possibile contrassegnare una classe come sealed per evitare che altre classi eseguano l'override della relativa funzionalità. Naturalmente le classi sealed non possono essere astratte. Si noti inoltre che una struttura è implicitamente di tipo sealed e pertanto non può essere ereditata. Utilizzare il modificatore sealed equivale a contrassegnare una classe con la parola chiave final in Java.

Modificatore readonly

Per definire una costante in C#, utilizzare il modificatore const o readonly anziché la parola chiave final di Java. Il fattore di distinzione tra questi due modificatori in C# è costituito dal fatto che gli elementi const vengono gestiti in fase di compilazione, mentre i valori dei campi readonly vengono specificati in fase di esecuzione. L'assegnazione a campi readonly pertanto può avvenire sia nel costruttore della classe che nella dichiarazione. La classe riportata di seguito dichiara ad esempio una variabile readonly denominata IntegerVariable che viene inizializzata nel costruttore della classe:

public class SampleClass
{
    private readonly int intConstant;

    public SampleClass ()  //constructor
    {
        // You are allowed to set the value of the readonly variable 
        // inside the constructor
        intConstant = 5;
    }


    public int IntegerConstant
    {
        set
        {
            // You are not allowed to set the value of the readonly variable 
            // anywhere else but inside the constructor

            // intConstant = value;  // compile-time error
        }
        get
        {
            return intConstant;
        }
    }
}
class TestSampleClass
{
    static void Main()
    {
        SampleClass obj= new SampleClass();

        // You cannot perform this operation on a readonly field.
        obj.IntegerConstant = 100;

        System.Console.WriteLine("intConstant is {0}", obj.IntegerConstant);  // 5
    }
}

Se un modificatore readonly viene applicato a un campo statico, deve essere inizializzato nel costruttore statico della classe.

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Modificatori di accesso (Guida per programmatori C#)

Costanti (Guida per programmatori C#)

Altre risorse

Linguaggio di programmazione C# per sviluppatori Java