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# 语法要点速览的更多相关文章

  1. 【OC语法要闻速览】一、方法调用

    调用方法 [object method]; [object methodWithInput:input]; output = [object methodWithOutput]; output = [ ...

  2. 快看Sample代码,速学Swift语言(1)-语法速览

    Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...

  3. .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...

  4. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究 ...

  5. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

  6. .NET平台开源项目速览(2)Compare .NET Objects对象比较组件

    .NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比较过程和要求可以灵活配置. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 ...

  7. .NET平台开源项目速览(21)Cron任务调度CronNET

    如果用知乎,可以关注专栏:.NET开源项目和PowerBI社区 Quartznet大名鼎鼎应该很少有人不知道,相关的开源项目很多,不过那东东对新手来说,有点晦涩,加上哪个Cron表达式,可能一进去云里 ...

  8. NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(转载)

    原文地址:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_FluentValidation_1.html 阅读目录 1.基本介绍 ...

  9. JavaScript学习笔记(一)——JS速览

    第一章 JS速览 1 限制时间处理事件 <script> setTomeout(wakeUpUser,5000); function wakeUpUser() { alert(" ...

随机推荐

  1. Linux IPC实践(10) --Posix共享内存

    1. 创建/获取一个共享内存 #include <sys/mman.h> #include <sys/stat.h> /* For mode constants */ #inc ...

  2. Shell中read的常用方式

    read命令的语法: read -p "Prompt" variable1 variable2 variableN -p "Prompt": 显示提示信息(和用 ...

  3. 21_Android中常见对话框,光传感器,通过重力感应器编写出指南针应用,帧动画,通过Jav代码的方式编写补间动画,通过XML的方式编写补间动画

     1 关于常见的对话框,主要有: 常见的对话框,单选对话框,多选对话框,进度条对话框(转圈类型的),带进度条的对话框. 案例结构: 完成如下结构的案例,将所有的案例都测试一下: 2 编写MainA ...

  4. Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示

    Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 今天项目中要实现一个天气的预览,加载的信息很多,字段也很多,所以理清了一下思路,准备独立出来写一个总结,这样对大家 ...

  5. Ubuntu快速截图

    以前截图,都是按Print键全屏截图,Alt+Print可以截当前的窗口.同时把系统自带的截图工具放到面板上,用的时候点击一下,再选择区域截图,很是不方便.不过,Ubuntu允许自己定义快捷键.要自己 ...

  6. ORM对象关系映射之GreenDAO自定义属性转换器PropertyConverter

    在使用GreenDAO定义实体的属性时候,通常来说定义的实体属性名就是对应的表的字段名.实体中属性的类型(如Long.String等)就是表的字段名类型,但是我们难免会有不一样的需求,比如实体中我定义 ...

  7. SMO实现

    #include "stdio.h" #include <vector> using namespace std; float function(float alfa[ ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(九) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 书中三维环境gazebo,slam的仿真例子 --$ r ...

  9. 插件化开发—动态加载技术加载已安装和未安装的apk

    首先引入一个概念,动态加载技术是什么?为什么要引入动态加载?它有什么好处呢?首先要明白这几个问题,我们先从 应用程序入手,大家都知道在Android App中,一个应用程序dex文件的方法数最大不能超 ...

  10. 图像边缘检测--OpenCV之cvCanny函数

    图像边缘检测--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1 ...