Difference Between Var & dynamic data type
VAR
- Introduced in C# 3.0
- Statically typed – This means the type of variable declared is decided by the compiler at compile time.
- Need to initialize at the time of declaration.
e.g.,var str="string Type";
Looking at the value assigned to the variablestr
, the compiler will treat the variablestr
as string.
- Errors are caught at compile time.
Since the compiler knows about the type and the methods and properties of the type at the compile time itself.
- Visual Studio shows intellisense since the type of variable assigned is known to compiler.
- e.g.,
var Object2;
will throw a compile error since the variable is not initialized. The compiler needs that this variable should be initialized so that it can infer a type from the value.
- e.g.
var obj1=1;
will compile
var obj1=
"string Type";
will throw error since the compiler has already decided that the type of obj1 is System.Int32 when the value 1 was assigned to it. Now assigning a string value to it violates the type safety.
Dynamic
- Introduced in C# 4.0
- Dynamically typed - This means the type of variable declared is decided by the compiler at runtime time.
- No need to initialize at the time of declaration.
e.g.,dynamic strValue;
strValue=”String Type”;
//Works fine and compiles
strValue=100;
//Works fine and compiles - Errors are caught at runtime
Since the compiler comes to about the type and the methods and properties of the type at the run time - Intellisense is not available since the type and its related methods and properties can be known at run time only
- e.g.,
dynamic object2;
will compile; - e.g.,
dynamic object2;
will compile and run
dynamic object2="String Type";
- will compile and run since the compiler creates the
type for obj1 as System.Int32 and then recreates the type as string when
the value “I am a string” was assigned to it.
This code will work fine.