tipo di object dinamico vs

Ho usato la dynamic e il tipo di object in modo intercambiabile. C’è qualche differenza tra questi due tipi? Ci sono implicazioni sull’uso dell’uno sull’altro? Quale di questi è più flessibile?

Sono molto diversi.

Se si utilizza la dynamic si sta optando per la digitazione dynamic, e quindi si è optato per la maggior parte per il controllo della compilazione. E sì, è meno performante rispetto all’utilizzo della digitazione statica in cui è ansible utilizzare la digitazione statica.

Tuttavia, non si può fare molto con il tipo di object ogni caso – non ha quasi nessun membro. Dove ti ritrovi ad usarlo? Quando si vuole scrivere un codice per scopi generali che possa funzionare con una varietà di tipi, si dovrebbe considerare generalmente i generici piuttosto che gli object .

Con l’avanzamento del linguaggio C # abbiamo visto che anche il tipo var è paragonabile ai tipi dinamici e di oggetti . Ecco tutti i 3 tipi che ho appreso confrontando questi 7 punti:

Oggetto

  1. L’object è stato introdotto con C # 1.0.
  2. Può memorizzare qualsiasi tipo di valore, perché l’object è la class base di tutti i tipi in .NET framework.
  3. Il compilatore ha poche informazioni sul tipo.
  4. Il tipo di object può essere passato come argomento del metodo e il metodo può anche restituire il tipo di object.
  5. È necessario eseguire il cast della variabile dell’object sul tipo originale per usarlo e eseguire le operazioni desiderate.
  6. Causa il problema in fase di esecuzione se il valore memorizzato non viene convertito nel tipo di dati sottostante.
  7. Utile quando non abbiamo più informazioni sul tipo di dati.

Var

  1. Var è stato introdotto con C # 3.0
  2. Può memorizzare qualsiasi tipo di valore, ma è obbligatorio inizializzare i tipi var al momento della dichiarazione.
  3. È sicuro dal tipo, vale a dire che il compilatore ha tutte le informazioni sul valore memorizzato, in modo che non causi alcun problema in fase di esecuzione.
  4. Il tipo di var non può essere passato come argomento del metodo e il metodo non può restituire il tipo di object. Il tipo di var lavora nello scope in cui è definito.
  5. Non è necessario eseguire il cast perché il compilatore ha tutte le informazioni per eseguire le operazioni.
  6. Non causa problemi poiché il compilatore ha tutte le informazioni sul valore memorizzato.
  7. Utile quando non conosciamo il tipo effettivo, ad esempio il tipo è anonimo.

Dinamico

  1. La dynamic è stata introdotta con C # 4.0
  2. Può memorizzare qualsiasi tipo di variabile, simile alla vecchia variabile VB.
  3. Non è sicuro dal tipo, ad esempio il compilatore non ha alcuna informazione sul tipo di variabile.
  4. Il tipo dinamico può essere passato come argomento del metodo e il metodo può anche restituire il tipo dinamico.
  5. La trasmissione non è richiesta ma è necessario conoscere le proprietà e i metodi correlati al tipo memorizzato.
  6. Causa il problema se si accede alle proprietà o ai metodi errati perché tutte le informazioni sul valore memorizzato vengono risolte solo in fase di esecuzione.
  7. Utile quando abbiamo bisogno di codificare utilizzando i linguaggi di riflessione o dinamici o con gli oggetti COM, perché è necessario scrivere meno codice.

Speriamo che questo possa aiutare qualcuno.

Grazie!

In un linguaggio semplice:
Supponiamo di avere il seguente metodo:

 public static void ConsoleWrite(string inputArg) { Console.WriteLine(inputArg); } 

Oggetto : il seguente codice ha compilato l’errore a meno che non esegua il cast dell’object nella stringa:

 public static void Main(string[] args) { object obj = "String Sample"; ConsoleWrite(obj);// compile error ConsoleWrite((string)obj); // correct Console.ReadKey(); } 

dinamico : il seguente codice viene compilato correttamente ma se contiene un valore ad eccezione di una string , genera un errore di runtime

 public static void Main(string[] args) { dynamic dyn = "String Sample"; ConsoleWrite(dyn); // correct dyn = 1; ConsoleWrite(dyn);// Runtime Error Console.ReadKey(); }