长沙品牌网站建设实力强去哪个网站可以接单做ps等等
长沙品牌网站建设实力强,去哪个网站可以接单做ps等等,宁波网站营销推广策划方案,深圳手机端网站建设模板C# 9 新特性 —— 补充篇Intro前面我们分别介绍了一些 C# 9 中的新特性#xff0c;还有一些我觉得需要了解一下的新特性#xff0c;写一篇作为补充。Top-Level Statements在以往的代码里#xff0c;一个应用程序必须要有 Main 方法才能运行#xff0c;从 C# 9 开始#xf… C# 9 新特性 —— 补充篇Intro前面我们分别介绍了一些 C# 9 中的新特性还有一些我觉得需要了解一下的新特性写一篇作为补充。Top-Level Statements在以往的代码里一个应用程序必须要有 Main 方法才能运行从 C# 9 开始支持没有 Main 方法的程序实际编译之后还是会有一个 Main 方法的使用示例如下using static System.Console;WriteLine(Hello World!);
实际编译出来的结果如下实际会生成一个没有命名空间的 Program$ 的类型类中定义的有一个名称是 Main$ 的静态方法Improved discards in lambda input parameter从 C# 7.2 开始我们可以使用 _ 来代表一个不使用的变量废弃变量但是在 lambda 表达式里默认不能有同名的参数名从 C# 9 开始支持多个参数同时使用 _ 来表示如下所示Funcint, int, int constant (_, _) 42;
Attributes for local function从 C# 9 开始我们可以在局部方法本地方法上设置 Attributepublic static void MainTest()
{InnerTest();[MethodImpl(MethodImplOptions.Synchronized)]void InnerTest(){Console.WriteLine(nameof(InnerTest));}
}
Partition methods在 C# 2.0 之后就支持了分部类通常分部类会出现在动态代码生成的地方对于想要将一个类型拆分到多个文件里我们通常也会考虑用到分部类。C# 3.0 开始支持了分部方法但是功能比较弱使用起来有一些限制分部类型各部分中的签名必须匹配。方法必须返回 void。不允许使用访问修饰符。分部方法是隐式 private 的。C# 9 增强了分部方法的支持分部方法的使用只能在一个地方有方法体目前主要是为了 Source Generator 引入了这个语言特性可以在一个地方定义方法在另外一个地方实现方法体示例如下partial class PartialMethod
{public static partial void MainTest();static partial void Test1();
}partial class PartialMethod
{public static partial void MainTest(){Test1();Console.WriteLine(Partial method works);}
}
符合 C# 3.0 分部方法规则的允许没有方法体否则必须要有方法体ModuleInitializerSource Generator 除了上面的分部方法之外还引入了一个 ModuleInitializer 的概念就像它的名字模块初始化器当用到某个模块的时候就会调用对应的 ModuleInitializer 方法进行初始化操作ModuleInitializer 定义如下namespace System.Runtime.CompilerServices
{[AttributeUsage(AttributeTargets.Method, Inherited false)]public sealed class ModuleInitializerAttribute : Attribute{}
}
使用示例如下internal static class ModuleInitializerSample
{/// summary/// Initializer for specific module/// /// Must be static/// Must be parameter-less/// Must return void/// Must not be a generic method/// Must not be contained in a generic class/// Must be accessible from the containing module/// /summary[ModuleInitializer]public static void Initialize(){Console.WriteLine(${nameof(ModuleInitializerAttribute)} works);}
}
ModuleInitlializer 对应的方法有几个要求必须是静态方法不能有方法参数无参数方法方法没有返回值返回类型必须是 void不能是泛型方法不能在泛型类中必须能够被所在模块访问的到至少是 internal来看反编译的代码可以看到有一个 Module 的类在这个 Module 类的静态构造方法里会去调用声明为 ModuleInitializer 的方法Function PointerC# 9 支持方法指针对委托进一步的”C化“进一步提升性能属于非安全代码使用需开启 unsafe使用示例如下public static unsafe void MainTest()
{delegate*int, int, int pointer Test;var result pointer(1, 1);Console.WriteLine(result);
}private static int Test(int num1, int num2)
{Console.WriteLine($Invoke in {nameof(Test)}, {num1}_{num2});return num1 num2;
}
Static Anoymouse MethodC# 9 开始支持在匿名方法或者表达式前声明 static声明 static 之后就不能使用实例变量只能使用静态变量如下所示internal class StaticAnonymousMethod
{private readonly int num 1;public void MainTest(){// anonymous methodAction action () { Console.WriteLine(num); };Action action1 static () { };// can not access num//expressionExpressionFuncint, bool expression i i num;ExpressionFuncint, bool expression1 static i i 1;// can not access num}
}
Covariant Return TypeC# 9 开始支持返回类型的 Covariant协变 对于 override 方法可返回从重写基方法的返回类型派生的类型。这对于record和其他支持工厂方法的类型会很有用。可以参考下面的使用示例internal class CovariantReturnType
{private abstract class Operation{}private abstract class OperationFactory{public abstract Operation GetOperation();}private class AddOperation : Operation{}private class AddOperationFactory : OperationFactory{// 返回类型协变返回具体的类型而不是抽象类中声明的类型public override AddOperation GetOperation(){return new();}}public static void MainTest(){var factory new AddOperationFactory();factory.GetOperation();}
}
More除此之外还有一些小的更新特性详细可以参考文末给出的官方文档。Referencehttps://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9https://github.com/WeihanLi/SamplesInPractice/tree/master/CSharp9Sample
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88367.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!