判断某一类型引用 使用哪个关键字?

引用数据类型关键字:  instanceof

                   判断一个引用 指向一个对象到底属于什么类型的时候,

 

                                     instanceof

                  if(动物  指向的是什么类型   猫类型)   如果成立就执行内部语句

                   {

                             如果指向的是猫类型就转型

                              动物可以调用子类从父类继承过来的非私有成员

                    }

                 else 否则        {

                 

             }

在C#中,区分值类型引用类型非常重要,因为这会影响到程序的行为和性能。以下是几种判断两者差异的方法: ### 通过定义位置识别 #### 值类型 通常包括内置的基本数据类型(如`int`, `float`, `double`, `char`, 和`bool`)、枚举(enum),以及结构体(struct)。如果你看到某个类型是由这些关键字之一定义的,则它很可能是值类型。 - 内置数值类型:`byte`, `short`, `int`, `long`, `decimal` - 其他基础类型:`char`, `bool` - 枚举 (`enum`) - 结构 (`struct`) 例子: ```csharp // 定义了一个新的 struct 类型 PersonInfo 并初始化了它的实例 p。 public struct PersonInfo { public string Name; } PersonInfo p = new PersonInfo(); ``` #### 引用类型 而像类(class), 接口(interface), 数组(array),字符串(string),委派(delegate) 这样的复杂类型则属于引用类型。如果某类型由`class`或其他上述关键词声明而成,那么该类型就是引用类型。 例子: ```csharp // 定义一个新的 class StudentType 并创建其实例 s。 public class StudentType{ public int ID { get; set; } } StudentType s = new StudentType() ; ``` ### 根据传递机制的不同来进行区别 另一个显著特征在于赋值操作后的结果是否相互影响。对于**值类型**, 当我们将一个变量赋予给另外一个新变量时,会复制一份副本出来;而对于**引用类型**, 赋予的动作实际上只是将指针从原地址指向目标地址而已。 考虑下面的例子来更好地理解这一点: ```csharp // 对于值类型的情况: Point a = new Point(1, 2); Point b = a; b.Offset(-4, -8); Console.WriteLine($"a={a}, b={b}"); // 输出: a=(1,2), b=(-3,-6) // 此处可以看到修改 'b' 后不会改变原来的 'a' // 对于引用类型的情形: Rectangle rectA = new Rectangle(new Point(0, 0), new Size(100, 50)); Rectangle rectB = rectA; rectB.X += 10; Console.WriteLine($"rectA.Location:{rectA.Location}, rectB.Location:{rectB.Location}"); // 输出: rectA.Location:(10,0), rectB.Location:(10,0) // 修改 rectB 影响到了 rectA 因为二者共享相同的底层资源。 ``` 总结来说,我们可以依据类型关键字及其特性去辨别它是值类型还是引用类型。同时也可以利用简单的测试代码观察当两个变量之间发生赋值动作之后各自的表现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值