c#中as可以父类转子类时,父类不为空,结果为null通常是什么原因?
时间: 2024-10-11 19:17:48 浏览: 42
父类和子类-c#内容经典
在C#中,`as`关键字用于尝试将一个对象强制转换为指定的类型。如果原始对象确实是指定类型的实例,那么转换会成功并返回该对象;否则,如果不是,则返回`null`。当你尝试将父类类型的对象赋值给子类类型的变量时,如果父类对象实际上不是一个子类的实例,即使父类对象本身并不为`null`,`as`操作也会返回`null`。
引用[1]:
```csharp
Console.WriteLine($"这是{this.GetType()}无参数构造函数"); // 这里说明的是对象类型,但并没有涉及到as转换的情况
```
引用[2]:
```csharp
outT Get(); // 定义了一个泛型方法,out参数只能作为返回值,不能用于输入
outT Do(inT t); // 同理,in参数只允许在方法体内接收
```
因此,当执行`parentObject as ChildClass`(假设`parentObject`是父类类型)时,如果`parentObject`不是`ChildClass`的实际实例,`as`操作会返回`null`,即使父对象非空。这是因为`as`不会检查对象的内容,仅验证类型兼容性。
阅读全文