C#,一些非常简单但应该知道的知识点

简介: 1.本地变量 一看这个标题你可能会一愣,这是个什么东东。看个小例子: static void main(){   int a=10;   MyClass mc=new MyClass();} 呵呵,这里的a与mc就是本地变量,它和字段一样,也保存数据。

1.本地变量

一看这个标题你可能会一愣,这是个什么东东。看个小例子:

static void main()
{
   int a=10;
   MyClass mc=new MyClass();
}

呵呵,这里的a与mc就是本地变量,它和字段一样,也保存数据。字段通常保存和对象状态有关的数据,而创建本地变量经常用于保存本地或临时数据。呵呵,简单吧,但是它和实例字段有何区别:

 

 

实例字段

本地变量

生存期 从实例创建开始,直到实例不再被访问
从它在块中被声明开始,到块执行结束
隐式初始化 初始化成该类的默认值 没有隐式初始化。如果变量在使用之前没有被赋值,编译器将报错
存储区域 由于实例字段是类的成员,所有的字段都存储在堆里,无论它是指类型还是引用类型 值类型:存储在栈里
引用类型:引用存储在栈里,数据存放在堆里

 

2.var 关键字

我们知道var可以自动推断变量的类型,如上代码,我们可以发现在声明开始部分提供类型名时,编译器能从初始化语句的右边推断出来它的类型,所以,在声明的开始部分包括显示的类型名多余的。

为了避免这种多余,可以在声明的开始部分的显示类型名的位置使用新的关键字var。上面代码可以改成:

static void main()
{
   var a=10;
   var mc=new MyClass();
}

 

3.值参数

使用值参数,通过将实参的值复制到形参的方式把数据传递给方法。方法被调用时,系统做如下操作:

    • 在栈中为形参分配空间
    • 将实参的值复制给形参

4.引用参数(ref)

    • 不会为形参在栈上分配内存
    • 实际情况是,形参的参数名将作为实参变量的别名,指向相同的内存位置
    • 实参必须是变量,在用作实参前必须被赋值。如果是引用类型变量,可以赋值一个引用或者null

5.输出参数(out)

    • 在方法内部,输出参数在能够使用之前必须被赋值。这就意味着参数的初始值是不起作用的,所以没有必要在方法调用前为参数赋值。
    • 在方法返回之前,方法内部任何路径都必须为所有输出参数进行一次赋值。
      如下代码:

public void Add(out int outValue) { int var1=outValue+2; }上述代码输出参数在方法赋值之前被读取将会报错。 

6.属性(set,get)

    • 属性是一个函数成员
    • 它不为数据的存储分配内存
    • 它可以执行代码
    • set访问器拥有一个单独的隐式的值参,名称为Value,与属性的类型相同且拥有一个返回类型void
    • get访问器没有参数,拥有一个与属性类型相同的返回类型。

7.对象初始化语句

      我们都知道创建一个对象是由new 后面跟着一个类构造函数及其参数列表组成。

对象初始化语句扩展了创建语法,在表达式的尾部放置了一组成员初始化的语句。允许我们创建新的对象实例时,设置字段和属性的值。

      该语法有两种形式:一种形式是包括构造函数的参数列表,另一种是不包括。注意第一种形式可以省略圆括号。

new  TypeName      {FieldOrProp=InitExpr,FieldOrProp=InitExpr,…}

new  TypeName      {FieldOrProp=InitExpr,FieldOrProp=InitExpr,…}

示例如下:

public static void main()

{

Point p1=new Point();

Point p2=new Point{X=4,Y=5,Z=6};

Point p3=new Point(9){X=7,Y=8};

}

public class Point

{

public int X=1;

public int Y=2;

public int Z=3;

public Point(int z) { Z=z; }

}

 

8.this关键字

this关键字在类中使用,是对当前实例的引用。它只能用在下列类成员的代码中

  • 实例构造函数
  • 实例方法
  • 属性和索引器的实例访问权
    由于静态成员不是实例的一部分,所以不能在任何静态函数成员的代码中使用this关键字。更适当的说,this用于下列目的:
  • 用于区分类的成员和本地变量或参数
  • 做为调用方法的实参

呵呵,上面这些内容我想大部分童鞋都能一下看懂,这都是些很基础的东西,有些可能都在不知不觉中用烂了,只是没有注意过还有个这么个东东。所以我给总结了一些供大家参考,希望大家能有所收获。

目录
相关文章
|
1月前
|
安全 Java 数据库
SpingSecurity框架重要知识点(理解)
SpingSecurity框架重要知识点(理解)
37 0
|
1月前
|
算法 测试技术 开发者
软件质量保证与测试知识点总结
【2月更文挑战第21天】软件质量保证与测试知识点总结
56 0
|
2月前
|
测试技术
面试题8: 如何确定测试需求的关键场景和细节?
面试题8: 如何确定测试需求的关键场景和细节?
|
4月前
|
缓存
Quarto 入门教程 (3):细节设置
Quarto 入门教程 (3):细节设置
75 1
|
6月前
|
缓存 JSON NoSQL
超级详细的易懂的Redis缓存用法,快来看看吧
说明:使用缓存的目的主要就是为了降低用户访问无论设备的频次,从缓存服务器中直接获取数据,快速的响应用户,提高整体的查询速度,用户体验更好
68 0
|
9月前
|
XML 存储 C#
C#—代码理解知识点(一)
有上面的代码之后就不得不上传上上面这个图片了,这是我们刚开始学习C#接触的第一个程序,虽然只是一个简单的输出“Hello World"程序,却带给我了我们这么多的知识以及如此规范的模版!
|
9月前
|
设计模式 C#
C#—代码理解知识点(二)
上回介绍了关于第一章所设计的那些知识点,这次介绍一下第二章所涉及到的代码,以及由代码折射出的知识点!
|
11月前
|
存储 开发者
彻底搞懂函数,读这篇文章就够了
如果你之前使用过任何一门编程语言,那么对于你来讲想必已经知道什么是函数,以及如何使用函数了,那你大可不必往下读了。这篇文章是写给新手看的,也就是说我假设你对于函数没有任何的概念。 我们就先从什么是函数来说起吧!
73 0
|
12月前
|
数据挖掘 Perl
Mummer 用法简析
Mummer 用法简析
84 0
|
Web App开发 存储 移动开发
​Cookie 从入门到进阶:一文彻底弄懂其原理以及应用
​Cookie 从入门到进阶:一文彻底弄懂其原理以及应用
416 0
​Cookie 从入门到进阶:一文彻底弄懂其原理以及应用