精华内容
下载资源
问答
  • 请大家放心,这是真正正式版,原版pdf。Illustrated C# 7 The C# Language Presented Clearly, Concisely, and Visually, Edition 5
  • C#高级编程第11版(Professional C# 7 and .NET Core 2.0)英文原版
  • look look C#7

    2017-02-12 22:11:43
    vs2017也rc好几个版本了,本想跟进看看c#7加入了什么内容,去搜索c#7,确实找到了不少文章,无奈很多特性ide根本不让编译啊。。。所以今天主要列出已经确定了的c#7特性(一般来说rc后也不会加入新的特性了,其它的...

    vs2017也rc好几个版本了,本想跟进看看c#7加入了什么内容,去搜索c#7,确实找到了不少文章,无奈很多特性ide根本不让编译啊。。。所以今天主要列出已经确定了的c#7特性(一般来说rc后也不会加入新的特性了,其它的预览特性我们可能等c#8哈哈)

    out变量

    在c#7之前我们得这样

    image

    在c#7中我们可以这样

    image

    当然你还可以使用“var”

    image

    这算一个小更新,其实这个问题存在很久了,应该也很好解决,不知为何到c#7才开始引入,不管如何以后可以少些一行代码了。

    元组(Tuples)

    需要安装nuget包:System.ValueTuple

    个人觉得这是c#7中带来最cool也是最有用的变化了,我们从头来看。

    大家还记得“Tuple”吗?不记得?ok我们看看它的定义。

    image

    image

    在来看看使用

    image

    image

    想不想哭。。讲真,自我编程以来几乎没有用过Tuple,“ItemN”对开发者非常的不友好,我宁愿创建一个struct或class来定义属性器。

    我们在c#7中试试(这也算多返回值了)?

    image

    image

    如果你觉得return (1,xxx)不够准确,那么你可以

    image

    如果你不想result.xxx,那么你还可以“解构”

    image

    你还可以这样(不推荐)

    image

    image

    还可以在方法内临时创建一个元组

    image

    通过这些特性我们还可以连续声明并赋值变量了

    image

    解构类(不推荐)

    image

    模式匹配(Pattern matching)

    这一块主要是对“switch”进行了丰富,有点类似c#6的异常过滤器

    在之前的版本中switch只能case常量,而现在可以拥有更多的条件了

    在c#7中我们可以这样

    image

    本地引用和返回(Ref locals and returns)

    这个个人比较少用,简单写个对比代码

    image

    本地函数(Local functions)

    这个是个很实用的功能,算是action、和func的丰富,我们来看一个例子:

    递归调用在c#7之前

    image

    在c#7中

    image

    表达式可用于更多成员(More expression-bodied members)

    image

    表达式抛出异常(Throw expressions)

    image

    值类型的异步返回(Generalized async return types)

    需要安装nuget包:System.Threading.Tasks.Extensions

    严格意义上这个不算一个语法的新特性而是增加了一些类。

    在之前我们想用“async”、“await”就必须使用Task作为返回值(void特殊情况忽略),但Task是一个引用类型(class),这样在非常简单的任务中会造成浪费(内存和gc)

    在c#7中微软添加了一个nuget包,增加了一个新的类型“ValueTask”用来解决这个问题。它是值类型的。

    image

    数值语法改进(Numeric literal syntax improvements)

    妈妈再也不怕我多加个0啦~

    image

    写在最后

    写这个的时候还是蛮头疼的,因为一下子想不起来这个特性的适用场景,还是需要具体实践之后才能体会新的语法是否有用。

    值得注意的是一些新的语法既然跟nuget包扯上了关系,这个我们下次再看细看,主要是roslyn的功劳。

    参考资料:https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/csharp-7

    展开全文
  • C#高级编程第11版(Professional C# 7 and .NET Core 2.0) 原版pdf+源码
  • C#7的新语法

    2020-01-11 16:09:49
    c#7之前我们得这样 在c#7中我们可以这样 当然你还可以使用“var” 这算一个小更新,其实这个问题存在很久了,应该也很好解决,不知为何到c#7才开始引入,不管如何以后可以少些一行代码了。 二、元组...

    一、out变量

    在c#7之前我们得这样

    在c#7中我们可以这样

    当然你还可以使用“var”

    这算一个小更新,其实这个问题存在很久了,应该也很好解决,不知为何到c#7才开始引入,不管如何以后可以少些一行代码了。

    二、元组(Tuples)

     

    需要安装nuget包:System.ValueTuple

    个人觉得这是c#7中带来最cool也是最有用的变化了,我们从头来看。

    大家还记得“Tuple”吗?不记得?ok我们看看它的定义。

    在来看看使用

    想不想哭。。讲真,自我编程以来几乎没有用过Tuple,“ItemN”对开发者非常的不友好,我宁愿创建一个struct或class来定义属性器。

    我们在c#7中试试(这也算多返回值了)?

    如果你觉得return (1,xxx)不够准确,那么你可以

    如果你不想result.xxx,那么你还可以“解构”

    你还可以这样(不推荐)

    还可以在方法内临时创建一个元组

    通过这些特性我们还可以连续声明并赋值变量了

    解构类(不推荐)

    三、模式匹配(Pattern matching)

    这一块主要是对“switch”进行了丰富,有点类似c#6的异常过滤器

    在之前的版本中switch只能case常量,而现在可以拥有更多的条件了

    在c#7中我们可以这样

    四、本地引用和返回(Ref locals and returns)

    这个个人比较少用,简单写个对比代码

    五、本地函数(Local functions)

    这个是个很实用的功能,算是action、和func的丰富,我们来看一个例子:

    递归调用在c#7之前

    在c#7中

    六、表达式可用于更多成员(More expression-bodied members)

    七、表达式抛出异常(Throw expressions)

    八、值类型的异步返回(Generalized async return types)

     

    需要安装nuget包:System.Threading.Tasks.Extensions

    严格意义上这个不算一个语法的新特性而是增加了一些类。

    在之前我们想用“async”、“await”就必须使用Task作为返回值(void特殊情况忽略),但Task是一个引用类型(class),这样在非常简单的任务中会造成浪费(内存和gc)

    在c#7中微软添加了一个nuget包,增加了一个新的类型“ValueTask”用来解决这个问题。它是值类型的。

    九、数值语法改进(Numeric literal syntax improvements)

    妈妈再也不怕我多加个0啦~

     

    展开全文
  • C#7的主要特性

    2019-04-11 17:42:22
    C#7集成到 .NET Framework4.6.2和Visual Studio2017中,增加了元组和模式匹配,使得C#更具函数式语言特点 要使用C#7的语法特性,需要 .NET Framework4.6.2或以上版本。Visual Studio2017的各个不同版本都预装了...

    C#7集成到 .NET Framework4.6.2和Visual Studio2017中,增加了元组和模式匹配,使得C#更具函数式语言特点

    要使用C#7的语法特性,需要 .NET Framework4.6.2或以上版本。Visual Studio2017的各个不同版本都预装了4.6.2或4.7,不过默认是使用4.6.1建立新工程,需要选择4.6.2或以上版本建立新工程,才能使用C#7新语法

    1.数字字面量

    现在可以在数字中加下划线,增加数字的可读性。编译器或忽略所有数字中的下划线

    int million = 1_000_000;
    

    虽然编译器允许在数字中任意位置添加任意个数的下划线,但显然,遵循管理,下划线应该每三位使用一次,而且,不可以将下划线放在数字的开头(_1000)或结尾(1000_)

    2.改进的out关键字

    C#7支持了out关键字的即插即用

    var a = 0;
    int.TryParse("345", out a);
    
    // 就地使用变量作为返回值
    int.TryParse("345", int out b);
    

    允许以_(下划线)形式“舍弃”某个out参数,方便你忽略不关系的参数。例如下面的例子中,获得一个二维坐标的X可以重用获得二维坐标的X,Y方法,并舍弃掉Y:

    struct Point
    {
    	public int x;
    	public int y;
    	private void GetCoordinates(out int x, out int y)
    	{
    		x = this.x;
    		y = this.y;
    	}
    	public void GetX()
    	{
    		// y被舍弃了,虽然GetCoordinates方法还是会传入2个变量,且执行y=this.y
    		// 但它会在返回之后丢失
    		GetCoordinates(out int x, out _);
    		WriteLine($"({x})");
    	}
    }
    

    3. 模式匹配

    模式匹配(Pattern matching)是C#7中引入的重要概念,它是之前is和case关键字的扩展。目前,C#拥有三种模式:

    • 常量模式:简单地判断某个变量是否等于一个常量(包括null)
    • 类型模式:简单地判断某个变量是否为一个类型的实例
    • 变量模式:临时引入一个新的某个类型的变量(C#7新增)

    下面的例子简单地演示了这三种模式:

    class People
    {
    	public int TotalMoney { get; set; }
    	public People(int a)
    	{
    		TotalMoney = a;
    	}
    }
    class Program
    {
    	static void Main(string[] args)
    	{
    		var peopleList = new List<People>() {
    			new People(1),
    			new People(1_000_000)
    		};
    		foreach (var p in peopleList)
    		{
    			// 类型模式
    			if (p is People) WriteLine("是人");
    			// 常量模式
    			if (p.TotalMoney > 500_000) WriteLine("有钱");
    			// 变量模式
    			// 加入你需要先判断一个变量p是否为People,如果是,则再取它的TotalMoney字段
    			// 那么在之前的版本中必须要分开写
    			if (p is People)
    			{
    				var temp = (People)p;
    				if (temp.TotalMoney > 500_000) WriteLine("有钱");
    			}
    			// 变量模式允许你引入一个变量并立即使用它
    			if (p is People ppl && ppl.TotalMoney > 500_000) WriteLine("有钱");
    		}
    		ReadKey();
    	}
    }
    

    可以看出,变量模式引入的临时变量ppl(称为模式变量)的作用域也是整个if语句体,它的类型是People类型
    case关键字也得到了改进。现在,case后面也允许模式变量,还允许when子句,代码如下:

    static void Main(string[] args)
    {
    	var a = 13;
    	switch (a)
    	{
    		// 现在i就是a
    		// 由于现在case后面可以跟when子句的表达式,不同的case有机会相交
    		case int i when i % 2 == 1:
    			WriteLine(i + " 是奇数");
    			break;
    		// 只会匹配第一个case,所以这个分支无法到达
    		case int i when  i > 10:
    			WriteLine(i + " 大于10");
    			break;
    		// 永远在最后被检查,即使它后面还有case子句
    		default:
    			break;
    	}
    	ReadKey();
    }
    

    上面的代码运行的结果是打印出13是奇数,我们可以看到,现在case功能非常强大,可以匹配更具体、跟他特定的范围。不过,多个case的范围重叠,编译器只会选择第一个匹配上的分支

    4.值类型元组

    元组(Tuple)的概念早在C#4就提出来,它是一个任意类型变量的集合,并最多支持8个变量。在我们不打算手写一个类型或结构体来盛放一个变量集合时(例如,它是临时的且用完即弃),或者打算从一个方法中返回多个值,我们会考虑使用元组。不过相比C#7的元组,C#4的元组更像一个半成品,先看看C#4如何使用元组:

    var beforeTuple = new Tuple<int, int>(2, 3);
    var a = beforeTuple.Item1;
    

    通过上面的代码发现,C#4中元组最大的两个问题是:

    • Tuple类将其属性命名为Item1、Item2等,这些名称是无法改变的,只会让代码可读性变差
    • Tuple是引用类型,使用任一Tuple类意味着在堆上分配对象,因此,会对性能造成负面影响

    C#7引入的新元组(ValueTuple)解决了上面两个问题,它是一个结构体,并且你可以传入描述性名称(TupleElementNames属性)以便更容易地调用他们:

    static void Main(string[] args)
    {
    	// 未命名的元组,访问方式和之前的元组相同
    	var unnamed = ("one", "two");
    	var b = unnamed.Item1;
    	// 带有命名的元组
    	var named = (first : "one", second : "two");
    	b = named.first;
    	ReadKey();
    }
    

    在背后,他们被编译器隐式地转化为:

    ValueTuple<string, string> unnamed = new ValueTuple<string, string>() ("one", "two");
    string b = unnamed.Item1;
    ValueTuple<string, string> named = new ValueTuple<string, string>() ("one", "two");
    b = named.Item1;
    

    我们看到,编译器将带有命名元组的实名访问转换成对应的Item,转换是使用特性实现的

    元组的字段名称

    可以在元组定义时传入变量。此时,元组的字段名称为变量名。如果没有指明字段名称,又传入了常量,则只能使用Item1、Item2等访问元组的成员

    static void Main(string[] args)
    {
    	var localVariableOne = 5;
    	var localVariableTwo = "some text";
    	// 显示实现的字段名称覆盖变量名
    	var tuple = (explicitFieldOne : localVariableOne, explicitFieldTwo : localVariableTwo);
    	var a = tuple.explicitFieldOne;
    	
    	// 没有指定字段名称,又传入了变量名(需要C#7.1版本)
    	var tuple2 = (localVariableOne, localVariableTwo);
    	var b = tuple.localVariableOne;
    	
    	// 如果没有指明字段名称,又传入了常量,则只能使用Item1、Item2等访问元组的成员
    	var tuple3 = (5, "some text");
    	var c = tuple3.Item1;
    	ReadKey();
    }
    

    上面的代码给出了元组字段名称的优先级:

    1. 首先是显示实现
    2. 其次是变量名(编译器自动推断的,需要C#7.1)
    3. 最后是默认的Item1、Item2作为保留名称

    另外,如果变量名或显示指定的描述名称是C#的关键字,则C#会改用ItemX作为字段名称(否则就会导致语法错误,例如将变量名为ToString的变量传入元组)

    var ToString = "1";
    var Item1 = 2;
    var tuple4 = (ToString, Item1);
    
    // ToString不能用作元组字段名称,强制改为Item1
    var d = tuple4.Item1; // "1"
    // Item1不能用作元组字段名,强制改为Item2
    var e = tuple4.Item2; // 2
    ReadKey();
    

    元组作为方法的参数和返回值

    因为元组实际上是一个结构体,所以它当然可以作为方法的参数和返回值。因此,我们就有了可以返回多个变量的最简单、最优雅的方法(比使用out的可读性好很多):

    // 使用元组作方法的参数和返回值
    (int, int) MultiplyAll(int multiplier, (int a, int b) members)
    {
    	// 元组没有实现IEnumerator接口,不能foreach
    	// foreach(var a in members)
    	// 操作元组
    	return (members.a * multiplier, members.b * multiplier);
    }
    

    上面代码中的方法会将输入中的a和b都乘以multiplier,然后返回结构。由于元组是结构体,所以即使含有引用类型,其值类型的部分也会在栈上进行分配,相比C#4的元组,C#7中的元组有着更好的性能和更友好的访问方式

    相同类型元组的赋值

    如果它们的基数(即成员数)相同,且每个元素的类型要么相同,要么可以实现隐式转换,则两个元组被看作相同的类型:

    static void Main(string[] args)
    {
    	var a = (first : "one", second : 1);
    	WriteLine(a.GetType());
    	var b = (a : "hello", b : 2);
    	WriteLine(b.GetType());
    	var c = (a : 3, b : "world");
    	WriteLine(c.GetType());
    	
    	WriteLine(a.GetType() == b.GetType()); // True,两个元组基数和类型相同
    	WriteLine(a.GetType() == c.GetType()); // False,两个元组基数相同但类型不同
    	
    	(string a, int b) d = a;
    	// 属性first,second消失了,取而代之的是a和b
    	WriteLine(d.a);
    	// 定义了一个新的元组,成员为string和object类型
    	(string a, object b) e;
    	// 由于int可以被隐式转换为object,所以可以这样赋值
    	e = a;
    	ReadKey();
    }
    

    5.解构

    C#7允许你定义结构方法(Deconstructor),注意,它和C#诞生即存在的析构函数(Destructor)不同。解构函数和构造函数做的事情某种程度上是相对的——构造函数将若干个类型组合为一个大的类型,而结构方法将大类型拆散为一堆小类型,这些小类型可以是单个字段,也可以是元组。当类型成员很多而需要的部分通常较小时,解构方法会很有用,它可以防止类型传参时复制的高昂代价

    元组的解构

    可以在括号内显示地声明每个字段的类型,为元组中的每个元素创建离散变量,也可以用var关键字

    static void Main(string[] args)
    {
    	// 定义元组
    	(int count, double sum, double sumOfSquares) tuple = (1, 2, 3);
    	// 使用方差的计算公式得到方差
    	var variance = tuple.sumOfSquares - tuple.sum * tuple.sum / tuple.count;
    
    	// 将一个元组放在等号右边,将对应的变量值和类型放在等号左边,就会导致解构
    	(int count, double sum, double sumOfSquares) = (1, 2, 3);
    	// 解构之后的方差计算,代码简洁美观
    	variance = sumOfSquares - sum * sum / count;
    	// 也可以这样解构,这会导致编译器推断元组的类型为三个int
    	var (a, b, c) = (1, 2, 3);
    	ReadKey();
    }
    

    上面的代码中,出现了两次解构方法的隐式调用:左边是一个没有元组变量名的元组(只有一些成员变量名),右边是元组的实例。解构方法所做的事情,就是将右边元组的实例中每个成员,逐个指派给左边元组的成员变量。例如:

    (int count, double sum, double sumOfSquares) = (1, 2, 3);
    

    就会使得count,sum和sumOfSquares的值分别为1,2,3。如果没有这个功能,就需要定义3个变量,然后赋值3次,最终得到6行代码,大大提高了代码的可读性。
    对于元组,C#提供了内置的解构支持,因此不需要手动写解构方法,如果需要对非元组类型进行解构,就需要定义自己的解构方法,显而易见,上面的解构通过如下的签名的函数完成:

    public void Deconstruct(out int count, out double sum, out double sumOfSquares)
    

    解构其他类型

    解构函数的名称必须为Deconstruct,下面的例子从一个较大的类型People中解构出我们想要的三项成员:

    // 示例类型
    public class People
    {
    	public int ID;
    	public string FirstName;
    	public string MiddleName;
    	public string LastName;
    	public int Age;
    	public string CompanyName;
    	// 解构全名,包括姓、名字和中间名
    	public void Deconstruct(out string f, out string m, out string l)
    	{
    		f = FirstName;
    		m = MiddleName;
    		l = LastName;
    	}
    }
    
    static void Main(string[] args)
    {
    	var  p = People();
    	p.FirstName = "Test";
    	var (fName, mName, lName) = p;
    	WriteLine(fName);
    
    	ReadKey();
    }
    

    解构方法不能有返回值,且要解构的每个成员必须以out标识出来。如果编译器对一个类型的实例解构,却没发现对应的解构函数,就会发生编译时异常。如果在解构时发生隐式类型转换,则不会发生编译时异常,例如将上述的解构函数的输入参数类型都改为object类型,仍然可以完成解构,可以通过重载解构函数对类型实现不同方式的解构

    忽略类型成员

    为了少写代码,我们可以在解构时忽略类型成员。例如,我们如果只关系People的姓和名字,而不关心中间名,则不需要多写一个解构函数,而是利用现有的:

    var (fName, _, lName) = p;
    

    通过使用下划线来忽略类型成员,此时仍然会调用带有三个参数的解构函数,但是p将会只有fName和lName两个成员
    元组也支持忽略类型成员的解构

    使用扩展方法进行解构

    即使类型并非由自己定义,仍然可以通过解构扩展方法来解构类型,例如解构.NET自带的DateTime类型:

    class Program
    {
    	static void Main(string[] args)
    	{
    		var d = DateTime.Now;
    		(string s, DayOfWeek dow) = d;
    		WriteLine($"今天是 {s}, 是 {d}");
    		ReadKey();
    	}
    }
    public static class ReflectionExtensions
    {
    	// 解构DateTime并获得想要的值
    	public static void Deconstruct(this DateTime dateTime, out string DateString, out DayOfWeek dayOfWeek)
    	{
    		DateString = dateTime.ToString("yyyy-MM-dd");
    		dayOfWeek = dateTime.DayOfWeek;
    	}
    }
    

    如果类型提供了解构方法,你又在扩展方法中定义了与签名相同的解构方法,则编译器会优先选用类型提供的解构方法

    6.局部函数

    局部函数(local functions)和匿名方法很像,当你有一个只会使用一次的函数(通常作为其他函数的辅助函数)时,可以使用局部函数或匿名方法。如下是一个利用局部函数和元组计算斐波那契数列的例子:

    static void Main(string[] args)
    {
    	WriteLine(Fibonacci(10));
    	ReadKey();
    }
    public static int Fibonacci(int x)
    {
    	if (x < 0) throw new ArgumentException("输入正整数", nameof(x));
    	return Fib(x).current;
    
    	// 局部函数定义
    	(int current, int previous) Fib(int i)
    	{
    		if (i == 1) return (1, 0);
    		var (p, pp) = Fib(i - 1);
    		return (p + pp, p);
    	}
    }
    

    局部函数是属于定义该函数的方法的,在上面的例子中,Fib函数只在Fibonacci方法中可用

    • 局部函数只能在方法体中使用
    • 不能在匿名方法中使用
    • 只能用async和unsafe修饰局部函数,不能使用访问修饰符,默认是私有、静态的
    • 局部函数和某普通方法签名相同,局部函数会将普通方法隐藏,局部函数所在的外部方法调用时,只会调用到局部函数

    7.更多的表达式体成员

    C#6允许类型的定义中,字段后跟表达式作为默认值。C#7进一步允许了构造函数、getter、setter以及析构函数后跟表达式:

    class CSharpSevenClass
    {
    	int a;
    	// get, set使用表达式
    	string b
    	{
    		get => b;
    		set => b = "12345";	
    	}
    	// 构造函数
    	CSharpSevenClass(int x) => a = x;
    	// 析构函数
    	~CSharpSevenClass() => a = 0;
    }
    

    上面的代码演示了所有C#7中允许后跟表达式(但过去版本不允许)的类型实例成员

    展开全文
  • C#高级编程出第11版了,目前只有英文原版,名字叫做Professional C# 7 and .NET Core 2.0, 本书首先简要介绍了C# 7 和 .NET Core 2.0的最新特性,然后继续解释如何使用面向对象的范例来实现C# 7。您将学习使用实体...
  • c# 7参数转换源代码

    热门讨论 2008-11-10 20:02:32
    c# 7参数转换源代码 c# 7参数转换源代码
  • C#高级编程出第11版了,目前只有英文原版,名字叫做Professional C# 7 and .NET Core 2.0,中文版预计19年下半年出版。高级编程(Professional)系列写得非常详细,适合希望对代码和原理有深入研究的人阅读。翻译:...

    C#高级编程出第11版了,目前只有英文原版,名字叫做Professional C# 7 and .NET Core 2.0,中文版预计19年下半年出版。高级编程(Professional)系列写得非常详细,适合希望对代码和原理有深入研究的人阅读。

    翻译:

    Professional C# 7 and .NET Core 2.0为有经验的程序员提供了他们需要与世界领先的编程语言有效合作的信息。最新的C语言更新增加了许多新的特性,帮助你在更短的时间内完成更多的工作,这本书是你快速入门的理想指南。C# 7重点关注数据消耗、代码简化和性能,对本地函数、元组类型、记录类型、模式匹配、非可空引用类型、不可变类型以及更好地支持变量提供了新的支持。VisualStudio的改进将给C开发人员与空间交互的方式带来重大改变,将.NET引入非微软平台,并将工具从诸如Docker、GULP和NPM等其他平台结合起来。在一个领先的.NET专家的指导下,沉浸在真实的实用性中,这个指南旨在让你跟上时代并回到工作中去。

    本书首先简要介绍了C# 7 和 .NET Core 2.0的最新特性,然后继续解释如何使用面向对象的范例来实现C# 7。您将学习使用实体框架与关系数据一起工作,并了解如何实际使用ASP.NET核心。本书将向您展示.NETCype如何允许跨平台应用程序的创建。

    您还可以了解Simulalr向应用程序添加实时功能。然后,您将看到如何使用MUGODB以及如何将MUGDB应用到应用程序中。您将了解无服务器计算和OAuthe概念,以及使用DokeCo编写ASP.NET核心应用程序。

    这个基于项目的指南使用实际的应用来证明这些概念。在本书的末尾,您将熟练地使用.NETCype 2开发应用程序。

    .NET Core is a general purpose, modular, cross-platform, and open source implementation of .NET. With the latest release of .NET Core, many more APIs are expected to show up, which will make APIs consistent across .Net Framework, .NET Core, and Xamarin. This step-by-step guide will teach you the essential .NET Core and C# concepts with the help of real-world projects.

    The book starts with a brief introduction to the latest features of C# 7 and .NET Core 2.0 before moving on to explain how C# 7 can be implemented using the object-oriented paradigm. You'll learn to work with relational data using Entity Framework and see how to use ASP.NET Core practically. This book will show you how .NET Core allows the creations of cross-platform applications.

    You'll also learn about SignalR to add real-time functionality to your application. Then you will see how to use MongoDB and how to implement MongoDB into your applications. You'll learn about serverless computing and OAuth concepts, along with running ASP.NET Core applications with Docker Compose.

    This project-based guide uses practical applications to demonstrate these concepts. By the end of the book, you'll be proficient in developing applications using .NET Core 2.0.

    目录

    eBook Manager and Catalog App

    Cricket Score Calculator and Tracker

    Cross Platform .NET Core System Info Manager

    Task Bug logging ASP .NET Core MVC app

    ASP.NET SignalR Chat Application

    Web Research Tool with Entity Framework Core

    A Serverless email validation Azure Function

    Twitter Clone using Oauth

    Using Docker and ASP.NET Core

    展开全文
  • C#7中的新特性 1.数字分隔符 数字分隔符使代码更具可读性。 在声明变量时,可以将_添加到单独的数字中。 编译器只删除_。 以下代码片段在C#7中看起来更具可读性: In C# 6 long n1 = 0x1234567890ABCDEF; In C#...
  • C# 6.0 https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-6 C# 7.0 ...https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7 C# 7.1 https://docs.microsoft.com/zh-
  • 使用超级多功能的C#7和Visual Studio 2017轻松开始编程 从C#7开始使用Visual Studio 2017进行编程是初学者对世界上最流行的编程语言的最终指南。无论您是刚开始编程的新手,还是刚接触C#的新手,都是开始时的...
  • 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不喜勿喷,或许对您有帮助。 在Visual Studio 2017配置支持C# 7+语法 心想都VS2017...
  • C#7下划线作用

    千次阅读 2019-08-30 10:36:38
    using System; namespace underscore { class Program { static void Main(string[] args) { int decimalNotation = 2_000_000; // 2 million int binaryNotatio...
  • 快速使用C#,使用独特的简洁和可视化格式来呈现C#7.0语言。无论您是第一次掌握C#还是努力加深理解,您都会发现本书对语言的各个方面都是清晰而新颖的。 数字在本书中是最重要的。在教授编程研讨会时,Daniel ...
  • 1、C# C# 是一种.net 语言,与此类似的还有 vb,F#。不同版本的语言要配合相应的解释器才能发挥作用。目前 最新版本 为 C# 7.3。 2、VS VS 是IDE,是 .net 开发者的生产工具。 3、.net FrameWork 在有 .net ...
  • To sum up: All of C# 7.0 should work on .Net 4.5 after installing the required packages and most of it should work on .N...
  • 洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号。 本文是该系列《Unity脚本运行时更新带来了...Unity2018.3将支持到C# 7.3,今天我们先来看看C#7.0新特性能给代码带来什么吧,不过这些特性得等到Unity201...
  • 你大概知道,C#语言可以构建两种程序。一种是带有入口点(entrypoint)的程序,这样操作系统就可以加载程序并从入口点执行;另一个是没有入口点的程序。操作系统不能直接执行程序,程序可以被其他有入口点的程序引用,...
  •  7:   Console .WriteLine( " 今天星期日 " );   break ; // 跳出当前的 switch   default : // 默认值,类似于 else , // 如果执行不符合,就直接跳到 default   Console .WriteLine( " 你是地球...
  • C#7-30笔记上

    千次阅读 2012-07-30 12:39:25
    五个修饰符: public; private; ptotect; internal;protect internal //下文中的同一个项目表示同一个程序集 public的范围最广,既可以修饰类,也可以修饰类的成员,同时可以被同一个项目或者其他项目继承和调用...
  • Beginner with c# 7

    2002-01-15 21:29:00
    7 语句(Statements) c#借用了c/c++大多数的语句方法,不过仍然有些值得注意的地方。还有些地方是有所改动的。 在这里,我只提一些c#特有的东东。 1。7。10 “foreach”语句 “foreach”语句列举一个集合内的所有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,791
精华内容 12,716
关键字:

c#7

c# 订阅