值类型,Nullable类型
1. 值类型
比如说int吧,是值类型,是个struct,是这样声明的
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<Int32>, IEquatable<Int32>
哪能看出来继承自ValueType?? 再说struct不是不能继承吗?为什么说继承自ValueType??
直接打印int的基类确实显示基类是ValueType.
Console.WriteLine(typeof(int));
Console.WriteLine(typeof(int).BaseType);
Console.WriteLine(typeof(int).BaseType.BaseType); /*输出:
System.Int32
System.ValueType
System.Object
*/
回答: ValueType的确是class,但是他的子类却是值类型,这是因为CLR对他的子类经过了特殊的处理.CLR若判断某类继承自ValueType,那么会在内存分配方面使它具有值类型的特征(例如直接分配在栈上),这和类库的继承层次结构并无多大关系。
public abstract class ValueType
C#这边的编译器也经过了特殊处理,使值类型在诸多方面不同于类类型,例如,我们不可以声明一个继承自ValueType的值类型等等. 简单的说微软对.net中的值类型做了特殊处理使其继承自ValueType.注:语法上struct是不允许继承的,但可以实现接口.觉得微软挺恶心的.老搞一些和语法不符的东西.
public struct Int32可以认为是public class Int32 : ValueType的另外一种写法。
2. Nullable类型
public struct Nullable<T> where T : struct
只支持值类型,表示可以为null的值类型变量。可以使用 ?放在值类型之后。 例如,在 C# 或 Integer? 的 int?
对应于数据库表中可以为NULL的字段.
static void Main(string[] args)
{
int? a;
int? b; // Test null
a = null;
Console.WriteLine(a.HasValue);
Console.WriteLine(); //
a = ;
b = a;
Console.WriteLine("a.HasValue = {0}, b.HasValue = {1}", a.HasValue, b.HasValue);
Console.WriteLine("a = {0}", a.Value);
Console.WriteLine("b = {0}", b.Value);
Console.WriteLine(); b = ;
Console.WriteLine("b = {0}", b.Value);
}
值类型,Nullable类型的更多相关文章
- 【C#】可空类型(Nullable)
C# 可空类型(Nullable) C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值. 例如,Nullable& ...
- c# nullable类型有什么用
可空类型,语法: ; int? inully = 10; Nullable<int> inullx0 = null; int? inully0 ...
- 【转】四、可空类型Nullable<T>到底是什么鬼
[转]四.可空类型Nullable<T>到底是什么鬼 值类型为什么不可以为空 首先我们都知道引用类型默认值都是null,而值类型的默认值都有非null. 为什么引用类型可以为空?因为引用类 ...
- int? 竟然真的可以是 null!.NET/C# 确定可空值类型 Nullable 实例的真实类型
使用 Nullable<T> 我们可以为原本不可能为 null 的值类型像引用类型那样提供一个 null 值.不过注意:Nullable<T> 本身也是个 struct,是个值 ...
- 可空类型Nullable
Nullable类型: 值类型变量默认为0,不可空,为了使它可空,出现了Nullable类型,类型前面加? 变为引用类型 值类型是没有null值的,比如int,DateTime,它们都有默认值.举个 ...
- javaScript中其他类型的值转换为Boolean类型
将javaScript中其他任意类型的值转换为对应Boolean类型的值. 一 将number类型的值转换为Boolean类型 数值为0: var myBoolean = new Boolean(0 ...
- Convert.ChangeType不能处理Nullable类型的解决办法
在做一个ORMapping功能的时候发现,Convert.ChangeType不能处理nullable类型,比如int?. 解决办法也很简单,贴出完整的代码(大部分代码来自网络),注意下面代码没经过完 ...
- 指定的值不是类型“Edm.Int32”的实例
指定的值不是类型“Edm.Int32”的实例参数名: value 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常 ...
- httppost的用法(NameValuePair(简单名称值对节点类型)核心对象)
一,案例一 定义了一个list,该list的数据类型是NameValuePair(简单名称值对节点类型),这个代码多处用于Java像url发送Post请求.在发送post请求时用该list来存放参数. ...
随机推荐
- MySQL Cluster导入数据表时报错:Got error 708 'No more attribute metadata records (increase MaxNoOfAttributes)' from NDBCLUSTER
准备把以前的非集群版MySQL数据导入到MySQL Cluster中,出现 'No more attribute metadata records (increase MaxNoOfAttribute ...
- ora01940 无法删除当前连接的用户
我用system这个用户登录oracle,想删除掉一个自己创建的用户user,在网上找到的方法都是说先查找到该用户连接的会话select username,sid,serial# from v$ses ...
- mac mysql命令行
https://www.cnblogs.com/lonecloud/p/5841522.html mac下使用mysql控制台命令行 命令行中输入 open .bash_profile 然后将 a ...
- boolean类型的特殊的get和set方法
public class D { private boolean a; public boolean isA() { return a; } public void setA(boolean a) { ...
- 联想T470设置U盘启动
联想T470设置U盘启动 学习了:http://www.udaxia.com/upqd/10092.html # F12 in Enter in USB HDD 如果不行: App Menu > ...
- jquery给多个span赋值
因为我想在页面载入完毕后,有几个地方显示当前时间,所以我须要给多个span赋值. span代码的写法例如以下: <span name="currentDate">< ...
- EffectiveJava(12)考虑实现Comparable接口
考虑实现Comparable接口 compareTo方法 Comparable接口的唯一方法,允许进行简单的等同性比较,允许执行顺序比较 Comparable接口被所有值类实现.所以如果一个值类有非常 ...
- C++11之function模板和bind函数适配器
在C++98中,可以使用函数指针,调用函数,可以参考之前的一篇文章:类的成员函数指针和mem_fun适配器的用法. 简单的函数调用 对于函数: void foo(const string &a ...
- JavaScript对象this指向(普通键this指向 非指向函数的键)
1.结论 JavaScript对象普通键(非指向函数的键)this指向是window. 2.示例 <!DOCTYPE html> <html lang="zh"& ...
- NYOJ 257 郁闷的C小加(一)
郁闷的C小加(一) 时间限制:1000 ms | 内存限制:65535 KB 难度: 描写叙述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说) ...