Condividi tramite


Definizioni dei tipi

I nuovi tipi vengono definiti a partire da quelli esistenti. I tipi di valore incorporati, i puntatori, le matrici e i delegati sono definiti al momento dell'utilizzo; si fa riferimento a essi come tipi impliciti. I tipi possono essere nidificati, ovvero un tipo può essere un membro di un altro tipo.

La definizione di un tipo comprende:

  • Gli eventuali attributi definiti per il tipo.

  • La visibilità del tipo.

  • Il nome del tipo.

  • Il tipo base del tipo.

  • Le interfacce eventualmente implementate dal tipo.

  • Le definizioni per ciascuno dei membri del tipo.

Attributi

Gli attributi forniscono metadati aggiuntivi definiti dall'utente e possono essere applicati praticamente a ogni elemento del linguaggio, inclusi tipi, proprietà e metodi.

Accessibilità dei tipi

Tutti i tipi dispongono di un modificatore di accessibilità che definisce la loro accessibilità da altri tipi. Nella tabella che segue si descrive l'accessibilità dei tipi supportata dal runtime.

Accessibilità Descrizione

public

Il tipo è accessibile da tutti gli assembly.

assembly

Il tipo è accessibile solo dall'interno dell'assembly.

L'accessibilità di un tipo nidificato dipende dal suo dominio di accessibilità, che è determinato sia dall'accessibilità dichiarata del membro sia dal dominio di accessibilità del tipo che lo contiene direttamente. Tuttavia il dominio di accessibilità di un tipo nidificato non può essere superiore a quello del tipo che lo contiene.

Il dominio di accessibilità di un membro nidificato M dichiarato in un tipo T all'interno di un programma P viene definito come riportato di seguito. Si noti che M stesso può essere un tipo.

  • Se l'accessibilità dichiarata di M è public il dominio di accessibilità di M è il dominio di accessibilità di T.

  • Se l'accessibilità dichiarata di M è protected internal il dominio di accessibilità di M è l'intersezione del dominio di accessibilità di T con il testo di programma di P e il testo di programma di qualsiasi tipo derivato da T e dichiarato esternamente a P.

  • Se l'accessibilità dichiarata di M è protected, il dominio di accessibilità di M corrisponderà all'intersezione del dominio di accessibilità di T con il testo di programma di T e di qualsiasi tipo derivato da T.

  • Se l'accessibilità dichiarata di M è internal, il dominio di accessibilità di M corrisponderà all'intersezione del dominio di accessibilità di T con il testo di programma di P.

  • Se l'accessibilità dichiarata di M è private, il dominio di accessibilità di M corrisponderà al testo di programma di T.

Nomi dei tipi

Il sistema di tipi comuni impone solo due restrizioni sui nomi:

  1. Tutti i nomi sono codificati come stringhe di caratteri Unicode, ovvero a 16 bit.

  2. I nomi non possono avere un valore incorporato (a 16 bit) pari a 0x0000.

Poiché tutti i confronti sono effettuati byte per byte, viene fatta distinzione tra maiuscole e minuscole e i confronti sono indipendenti dalle impostazioni internazionali.

Sebbene un tipo possa fare riferimento a tipi da altri moduli e assembly, viene definito completamente all'interno di un unico modulo. I nomi dei tipi devono solo essere univoci all'interno di un assembly. Per identificare un tipo in modo completo, il nome del tipo deve essere qualificato dall'assembly che contiene l'implementazione del tipo. Per ulteriori informazioni, vedere Specifica di nomi di tipo completi.

Tipi base e interfacce

Un tipo può ereditare valori e comportamenti da un altro tipo. Il sistema di tipi comuni non consente ai tipi di ereditare da più di un tipo base.

Un tipo può implementare un numero indefinito di interfacce. Per implementare un'interfaccia un tipo deve implementare tutti i membri virtuali di tale interfaccia. Un metodo virtuale può essere implementato da un tipo derivato e può essere richiamato in modo statico o dinamico. Per ulteriori informazioni sui membri virtuali, vedere Membri dei tipi. Per ulteriori informazioni sull'ereditarietà e le interfacce, vedere Classi e Interfacce.

Membri dei tipi

Il comportamento e lo stato di un tipo è definito dai relativi membri: eventi, campi, tipi nidificati, metodi e proprietà. Per ulteriori informazioni, vedere Membri del tipo.

Vedere anche

Concetti

Membri dei tipi

Altre risorse

Sistema di tipi comuni
Assembly in Common Language Runtime
Estensione di metadati mediante attributi