在C#4.0中,引入了一种称为动态类型的新类型。它用于避免编译时类型检查。编译器不会在编译时检查动态类型变量的类型,而是在运行时检查动态类型变量的类型。动态类型变量是使用dynamic关键字创建的。
例子:
dynamic value = 123;
重要事项:
- 在大多数情况下,动态类型的行为类似于对象类型。
- 您可以使用GetType()方法在运行时获取动态变量的实际类型。动态类型会在运行时根据右侧显示的值更改其类型。如下例所示。
例子:
// C# program to illustrate how to get the // actual type of the dynamic type variable using System; class GFG { // Main Method static public void Main() { // Dynamic variables dynamic value1 = "GeeksforGeeks"; dynamic value2 = 123234; dynamic value3 = 2132.55; dynamic value4 = false; // Get the actual type of // dynamic variables // Using GetType() method Console.WriteLine("Get the actual type of value1: {0}", value1.GetType().ToString()); Console.WriteLine("Get the actual type of value2: {0}", value2.GetType().ToString()); Console.WriteLine("Get the actual type of value3: {0}", value3.GetType().ToString()); Console.WriteLine("Get the actual type of value4: {0}", value4.GetType().ToString()); } }
输出:
Get the actual type of value1: System.String Get the actual type of value2: System.Int32 Get the actual type of value3: System.Double Get the actual type of value4: System.Boolean
- 当您将类对象分配给动态类型时,编译器将不会检查保存自定义类对象的动态类型的正确方法和属性名称。
- 您还可以在方法中传递动态类型参数,以便该方法在运行时可以接受任何类型的参数。如下例所示。
例子:
// C# program to illustrate how to pass // dynamic type parameters in the method using System; class GFG { // Method which contains dynamic parameters public static void addstr(dynamic s1, dynamic s2) { Console.WriteLine(s1 + s2); } // Main method static public void Main() { // Calling addstr method addstr("G", "G"); addstr("Geeks", "forGeeks"); addstr("Cat", "Dog"); addstr("Hello", 1232); addstr(12, 30); } }
输出:
GG GeeksforGeeks CatDog Hello1232 42
- 如果方法和属性不兼容,则编译器将在运行时引发异常。
- 它不支持Visual Studio中的智能感知。
- 如果没有动态类型的类型检查,则编译器在编译时不会在动态类型上引发错误。