c# 语法要点速览
C# 变量类型
- sbyte
- byte
- short
- ushort
- int
- uint
- long
- ulong
- float
- double
- decimal
- char
- bool
- string
switch
默认不能穿透,但是也必须有break用于结束。
显式转换
显式转换时默认unchecked,可以调用checked方法去调用。
显式转换可以用括号或者Convert类的方法。
使用as运算符,不能转换返回null,但是as方法不能转换为不能为null的基本类型。
枚举
枚举使用基本类型。
foreach
foreach(int item in items){
WriteLine(item);
}
多维数组
多维数组
int[,] itemsMatrix=new int[3,4];
访问
itemMatrix[3,4];
锯齿数组
int [][] itemMatrix=new int[2][];
itemMatrix[0]=new int[3];
itemMatrix[1]=new int[4];
调用类静态变量
ClassName.varName
(仅当和局部变量冲突时需要明示类名)
引用
- ref: 在引用前需要赋值。
int a=0;
Increase(ref a)
- out: 在引用前不需要赋值,实际上,也无法赋值,传入的是新值。
static void OutTest(out int a)
{
a = 20;
}
static void Main(string[] args)
{
OutTest(out int a);
Console.WriteLine(a);
}
委托
关键字delegate, 定义委托后,可以传入方法进行执行。
委托通常作为事件的类型使用。
属性
基本写法
private int c;
public int C
{
get
{
return c;
}
set
{
c = value;
}
}
自动属性
public int Value{
get;
set;
}
get和set可以选择性写一个,表示只读或者仅可写,自动属性可以添加默认值如下:
public int Value{
get;
set;
}=0;
继承和多态
隐藏基类成员
不加override则会隐藏,但是会警告,使用new 关键字修饰方法可以直接隐藏。用new覆盖的方法和用override重写的方法,其主要区别是多态时的调用区别。重写会改变父类型的方法,即使用父类型调用子类型实例的该方法时运行子类型的方法,而覆盖则不会。
调用基类方法
可以用base
识别类型
typeof()
is
c# 6.0后可以用if(object is Type reNameObject)这种形式去使用is以更方便的开发。
运算符重载
也可以通过实现一些方法来进行,比如,继承Comparable类并实现CompareTo方法。
可空类型
用于基本类型:如int?
??
op1??op2
等价于
op1==null?op2:op1
另一种常见做法是,在c# 6.0里
if(a!==null) a.method();
可简写为
a?.method();
单独说一下,对于事件,在过去
if(myEvent!=null) myEvent();
现在c# 6.0可以写成
myEvent?.Invoke();
初始化器
用{}表示,内容为变量名=赋值。
也可以用于给集合类初始化,按顺序即可。
例如:
class Connection
{
//事件声明
//EventHandler是系统自建的用于处理事件的委托
public event EventHandler<MessageArrivedEventArgs> MessageArrived;
public String Name { get; set; } = "Default Connection";
private Timer pollTimer;
public static Random random = new Random();
public Connection()
{
pollTimer = new Timer(100);
//达到时间间隔时用CheckForMessage方法处理事件。(类型EvenHandler<MessageArrivedArgs>已经隐式转换)
pollTimer.Elapsed += CheckForMessage;
}
}
可以这样初始化
Connection connection = new Connection { Name = "First Connection" };
类型推断
var(同C++ auto),实际应用中非常广泛。
可选参数
Optional 修饰 或者 默认值为false
命名参数
传参时用参数名:参数格式传,建议使用时全部使用命名参数
Lambda
类似于java8的lambda,但是不限制于特定接口才能运用lambda,自由度很大。
public void Connect() => pollTimer.Start();
c# 语法要点速览的更多相关文章
- 【OC语法要闻速览】一、方法调用
调用方法 [object method]; [object methodWithInput:input]; output = [object methodWithOutput]; output = [ ...
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
- .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...
- .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究 ...
- .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB
今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...
- .NET平台开源项目速览(2)Compare .NET Objects对象比较组件
.NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比较过程和要求可以灵活配置. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 ...
- .NET平台开源项目速览(21)Cron任务调度CronNET
如果用知乎,可以关注专栏:.NET开源项目和PowerBI社区 Quartznet大名鼎鼎应该很少有人不知道,相关的开源项目很多,不过那东东对新手来说,有点晦涩,加上哪个Cron表达式,可能一进去云里 ...
- NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(转载)
原文地址:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_FluentValidation_1.html 阅读目录 1.基本介绍 ...
- JavaScript学习笔记(一)——JS速览
第一章 JS速览 1 限制时间处理事件 <script> setTomeout(wakeUpUser,5000); function wakeUpUser() { alert(" ...
随机推荐
- 分布式进阶(九)Ubuntu下使用nsenter进入Docker容器
使用nsenter进入Docker容器 Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH.如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可.当我启动 ...
- 08_Android中的SimpleAdapter的使用
1 目的界面 2.编写Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manif ...
- Linux进程实践(1) --Linux进程编程概述
进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...
- H5 学习之旅-H5表格(7)
表格语法 table:简历表格 captian:表格标题 th:表格行表头 tr:表格行 td:单元格 thead:表格页眉 tfoot:表格页脚 tbody:表格主体 col:列属性 !!!代码实例 ...
- (十七)TableView的本地性能优化
面试中常常会问TableView的性能优化. TableView只会加载能看到的Cell,每当有一个Cell进入视野范围内,就会调用. 存在着内存隐患,如果用户拖动的很快,所以内存会飙升的很快,因此要 ...
- 《java入门第一季》之面向对象this关键字
/* 起名字要做到见名知意. this:是当前类的对象引用.简单的记,它就代表当前类的一个对象. 注意:谁调用这个方法,在该方法内部的this就代表谁. this的场景: 解决局部变量隐藏成员变量 * ...
- 粒子系统属性Life,发射速率和总数的关系
提示,粒子系统的life,发射速率以及总粒子数是相互影响的. 如果你要发射器射出粒子流然后停顿一会,你将简单的必须确保lifetime和发射速率相匹配以至于在发射出的粒子达到粒子总数之前一些粒子是活跃 ...
- 网站开发进阶(二十一)Angular项目信息错位显示问题解决
Angular项目信息错位显示问题解决 绪 最近在项目开发过程中遇到这样一个棘手的问题:查询出所有订单信息后,点击选择某一个订单,查询出的结果是上一次查询所得的结果.而且会出现点击两次才可以显示订单详 ...
- Leetcode_48_Rotate Image
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/44216867 You are given an n x n ...
- OpenCV 透视变换实例
参考文献: http://www.cnblogs.com/self-control/archive/2013/01/18/2867022.html http://opencv-code.com/tut ...