C#数据类型


1.引用是变量的别名,指针是变量的地址

2.引用不能独立存在,定义时必须初始化,指针则不然;

3对变量的引用的操作就是对该变量的引用的操作,能引起变量永久性的改变,而对某变量指针的操作并不影响改变值,只有通过指针对其目标的操作才能永久性改变指针所指的目标值。

4.引用在寿命期内不能再定义为其他变量的引用,指针却可以指向其他变量。

5.不能引用一个数组,但有数组的指针。

6没有引用的引用,但有指针的指针。


其他运算符:

sizeof()  返回数据类型的大小

typeof() 返回class的类型

as  强制转换,即时转换失败也不会抛出异常


C#封装

封装 被定义为“把一个或多个项目封闭在一个物理的或逻辑的包中。”在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。

public:所有对象都可以访问;

private:对象本身在对象内部可以访问;

protected:只有该类对象及其子类对象可以访问

internal:同一个程序集的对象可以访问;

protected internal:访问限于当前程序集或派生自包含类的类型。

一看就知道什么意思:成员函数Display()也被声明为public,所以它能被Main()使用Rectangle类的实例r访问。


Internal访问修饰符:允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象。换句话说,带有访问修饰符的任何成员可以被定义在该成员所定义的应用程序内的任何类和方法进行访问。

protected Internal 访问修饰符: 允许在本类,派生类或者包含该类的程序集中访问。这也被用于实现继承。


比如说:一个人A为父类,他的儿子B,妻子C,私生子D(注:D不在他家里)

如果我们给A的事情增加修饰符:

  • public事件,地球人都知道,全公开
  • protected事件,A,B,D知道(A和他的所有儿子知道,妻子C不知道)
  • private事件,只有A知道(隐私?心事?)
  • internal事件,A,B,C知道(A家里人都知道,私生子D不知道)
  • protected internal事件,A,B,C,D都知道,其它人不知道

参数传递:

当调用带有参数的方法时,您需要向方法传递参数。C#中有三种向方法传递参数的方式:


值参数: 这种方式复制参数的实际值给函数的形式参数,实参和形参使用的而是两个不同内存中的值。

在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。

引用参数()():这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。

输出参数:这种方式可以返回多个值。

提供给输出参数的变量不需要赋值。当需要从一个参数没有指定初始值的方法中返回值时,输出参数特别有用。

ref和out的区别:

一个用关键字 ref 标示,一个用 out 标示。

牵扯到数据是引用类型还是值类型。

一般用这两个关键字你是想调用一个函数将某个值类型的数据通过一个函数后进行更改。传 out 定义的参数进去的时候这个参数在函数内部必须初始化。否则是不能进行编译的。ref 和 out 都是传递数据的地址,正因为传了地址,才能对源数据进行修改。

一般情况下不加 ref 或者 out 的时候,传值类型的数据进去实际上传进去的是源数据的一个副本,也就是在内存中新开辟了一块空间,这里面存的值是与源数据相等的,这也就是为什么在传值类型数据的时候你如果不用 return 是无法修改原值的原因。但是你如果用了 ref,或者 out,这一切问题都解决了,因为他们传的是地址。

out 比起 ref 来说,还有一个用法就是可以作为多返回值来用,都知道函数只能有一个返回值,C#里,如果你想让一个函数有多个返回值,那么OUT能很容易解决。

C#可空类型(Nullable)

C#提供了一个特殊的数据类型,nullable类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个null值。

例如,Nullable<int32>,读作“可空的int32”,在处理数据库和其他包含包含可能未赋值的元素的数据类型时,将null赋值给数值类型或布尔型的功能特别有用。

下面的实例演示了可空数据类型的用法:


         int? num1 = null;
         int? num2 = 45;
         double? num3 = new double?();
         double? num4 = 3.14157;
         bool? boolval = new bool?();

       显示可空类型的值: , 45,  , 3.14157
       一个可空的布尔值:

Null合并运算符(??)

Null合并运算符

初始化数组:声明一个数组不会在内存中初始化数组。当初始化数组变量时,可以赋值给数组。数组是一个引用类型。所以需要使用new关键字来创建数组是实例。

double[]  balance  =new double [10];

下面是一个实例,使用上面提到的三个概念,即声明、赋值、访问数组。

多维数组的声明:

int [,] a = new int [3,4] {
 {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
 {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
 {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
};
访问:int val = a[2,3];

交错数组:数组的数组

int [][] a = new int [][]{ new int []{ 0 , 0 }, new int []{ 1 , 2 },
 new int[]{2,4},new int[]{ 3, 6 }, new int[]{ 4, 8 } };

 params 关键字可以指定采用数目可变的参数的参数方法。



1.带params关键字的参数类型必须是一维数组,不能使用在多维数组;

2.不允许和out、ref同时使用

3.带params关键字的参数必须是最后一个参数,并且在方法的声明中只允许一个params关键字

4.不能仅使用params来使用重载方法

5.没有params关键字的方法的优先级高于带有params关键字方法的优先级


C#结构的特点:

1、结构可带有方法、字段、索引、属性、运算符方法和事件。

2、结构可以定义构造函数、但不能定义析构函数。但是,您不能为结构定义默认的构造函数。默认的构造函数是自定义的,且不能被改变。

3、与类不同,结构不能继承其他的结构或类

4、结构不能作为其他结构或类的基础结构

5、结构可实现一个或多个接口

6、结构成员不能被指定为abstract、virtual、或protected

7、当您使用new操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用new操作符即可被实例化

如果不使用new操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值