读书笔记: C# 7.0 in a nutshell (一、二章)

内容:

第一章:

  • 内存管理
  • IL
  • 框架
  • C# 7和6的特性

第二章: C#基础

  • 编译
  • 避免keyword冲突
  • 类型
  • 数字类型
  • Bool
  • String
  • Array
  • 变量和参数Null
  • Statement
  • Namespace

第一章 介绍C#和 .NET Framework

内存管理

C# 依赖runtime来执行自动内存管理。比如.NET Framework中的 Common Language Runtime(CLR)。 同时C#也没有完全不允许使用指针, 对于性能要求高的地方,也可以使用unsafe来表示自己进行内存管理。

IL

C#语言的 managed code 叫做Intermediate Language(IL) , CLR通常是在执行前,将IL转换成native machien code,这叫做 Just-In-Time(JIT)编译。 也有提前编译用来增加性能。

IT是被叫做 assembly包含的, assembly可以是一个 .exe 也可以是一个dll。 assembly包含IL还有其他的 metadata

框架

  1. .NET Framework
  2. Universal Windows Platform(UWP)
  3. .NET Core + ASP.NET Core
  4. Xamarin

这里写图片描述

四个框架的主要区别他们支持的平台不同、上层library不同,还有使用目的不同。

近期版本语言新增特点

C# 7.0

1.数字字面量

int million = 1_000_000;   // 数字中间加上 下划线增加可读性

var b = 0b1010_1011_1100_1101_1110_1111;   // 0b 开头表示二进制

2.Out变量创建和丢弃

bool successful = int.TryParse ("123", out int result);   //不需要提前创建变量来使用out

SomeBigMethod (out _, out _, out _, out int x, out _, out _, out _);  //对于不关心的值,可以使用 _ 来丢弃

3.Pattern Variable

void Foo (object x)
{
    if (x is string s)              // 使用is,通过判断来创建变量
    Console.WriteLine (s.Length);
}

switch (x)
{
    case int i:
        Console.WriteLine ("It's an int!");
        break;
    case string s:
        Console.WriteLine (s.Length); // We can use the s variable
        break;
    case bool b when b == true: // Matches only when b is true
        Console.WriteLine ("True");
        break;
    case null:                              // 可以和null比较
        Console.WriteLine ("Nothing");
        break;
}

4.local methods

void WriteCubes()
{
    Console.WriteLine (Cube (3));
    Console.WriteLine (Cube (4));
    Console.WriteLine (Cube (5));
    int Cube (int value) => value * value * value;   //在方法中创建方法
}

5.箭头语法的扩展

public class Person
{
string name;
public Person (string name) => Name = name;         //构造函数
public string Name
{
get => name;
set => name = value ?? "";                                      //set的支持
}
~Person () => Console.WriteLine ("finalize");     //析构函数
}

6.Deconstructor

从类对象中抽取值

public void Deconstruct (out string firstName, out string lastName)
{
    int spacePos = name.IndexOf (
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值