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

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用于下列目的:
  • 用于区分类的成员和本地变量或参数
  • 做为调用方法的实参

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏河湾欢儿的专栏

第三节 json数据绑定以及dom回流重绘、映射

582
来自专栏Vamei实验室

Python基础07 函数

函数最重要的目的是方便我们重复使用相同的一段程序。 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。 函...

1809
来自专栏技术博文

PHP声明变量

变量是指在程序的运行过程中随时可以发生变化的量,在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性等。变量的值是临时的,当程...

26111
来自专栏数说戏聊

03.向量化计算1.生成等差数组2.四则计算与函数计算3.比较运算4.矩阵运算5.数据框运算

定义:是一种特殊的并行计算的方式,可以同一时间执行多次操作,通常是对不同的数据执行同一个或同一批指令。主要用于pandas的Series系列和DataFrame...

681
来自专栏Golang语言社区

Golang语言--slice 切片原理

golang 中的 slice 非常强大,让数组操作非常方便高效。在开发中不定长度表示的数组全部都是 slice 。但是很多同学对slice 的模糊认识,造成认...

3579
来自专栏达摩兵的技术空间

es6入门

es6作为最新的js语言版本,有很多特性是不得不晓的。下面将语法中常用的分析出来,对应到基本对象类型的会在对象里描述。

722
来自专栏小白的技术客栈

Python内置数据结构之字符串

字符串 今天跟大家来说一说Python中的字符串数据结构。 ? 上文回顾 让我们回顾一下可变类型及不可变类型: 不可变数据类型:str、int、tuple ...

3678
来自专栏达摩兵的技术空间

es6入门

es6作为最新的js语言版本,有很多特性是不得不晓的。下面将语法中常用的分析出来,对应到基本对象类型的会在对象里描述。

251
来自专栏开源项目

Vue 2.0 学习总结,精华全在这里了

摘要:年后公司项目开始上vue2.0,自己对学习进行了总结,希望对大家有帮助! 1Vue 介绍 Vue 是什么? https://vuefe.cn/guide ...

27211
来自专栏老马说编程

计算机程序的思维逻辑 (11) - 初识函数

查看上节内容,请点击上方链接关注公众号,查看所有文章。 函数 前面几节我们介绍了数据的基本类型、基本操作和流程控制,使用这些已经可以写不少程序了。 但是如果需...

1727

扫描关注云+社区