ASP.NET Core高级编程--C#基本特性(一)

简介: 本文章简略介绍C#的部分特性

C#的基本特性(一)

本文不介绍C#的一些基本语法,C#的基本语法和C,C++等系列语言非常类似,读者如果有上述语言基础很容易入门C#语言,所以本部分的系列文章主要是介绍一些C#中具有而其他语言很少具有的特性。
笔者比较喜欢tanenbaum教授的写作风格,所以笔者写作也会为引出一个新的特性,会先介绍在没有出现这个新特性的时候的相关情况,然后引入这个特性的优点,所以文章可能会比较长,读者可以根据需要来阅读有用的部分。

全局using和隐式using

这个特性是C# 10引入的新特性,用于解决多次引入常用命名空间的问题。为了描述这个特性的作用,我们先来看在没有全局using或隐式using的时候的问题(或者说是不方便的地方),当然在其他语言当中也或多或少也会存在这样的问题(比如Java):
每个程序都不免使用输出的功能,而输出的功能定义在System命名空间下,这个样就会出现下面的情况:

using System;

namespace test;

class Student
{
   
    public void Study()
    {
   
        Console.WriteLine("Study");
    }
}
using System;

class Teacher
{
   
    public void Say()
    {
   
        Console.WriteLine("i am a teacher");
    }
}

我们可以发现,类似于输出这样的常用功能所在的命名空间在每个文件里边都使用了一次,而如果需要使用大量的此类常用的命名空间,显然代码的可读性是非常低的(读者可以想象一下一个源代码文件的开头出现大量的using是什么感觉),为此C#推出了一个特性,叫做global usings,这个特性可以将常见的命名空间汇总到一个cs文件当中,在整个项目的范围里便不需要再次声明这些命名空间
可以改变如下:
在一个cs文件中添加如下代码即可:

global using System;

这样在其他的文件当中便可以把对System命名空间的using去掉,以增加代码的可读性,当然,除了System命名空间,读者还可以根据自己项目的需要,将对常用的命名空间的引用汇总到一个cs文件当中(笔者的习惯是把这个cs文件命名为GlobalUsings.cs)
除了这个特性之外,还有另外一种方式可以实现类似功能,导入由创建项目的类型决定的一些命名空间,就是使用implicit usings配置项,这个配置项是在.net 6中默认启用的,手动启用方式如下:
在csproj文件的PropertyGroup元素内添加子元素:

<ImplicitUsings>enable</ImplicitUsings>

当然,也可以禁用掉这个配置项目,只需要将这个元素的值改为disable即可,如果起用了这个配置项,会根据创建的项目类型自动导入一些命名空间,比如,如果创建了一个web项目,则会默认引入如下命名空间:

System.Net.Http.Json
Microsoft.AspNetCore.Builder
Microsoft.AspNetCore.Hosting
Microsoft.AspNetCore.Http
Microsoft.AspNetCore.Routing
Microsoft.Extensions.Configuration
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting
Microsoft.Extensions.Logging

还有一种方式,就是使用Using标记,使用方式如下:
在csproj文件中Project根元素下配置如下元素即可:

  <ItemGroup>
    <Using Include="test"/>
    <Using Include="System"/>
  </ItemGroup>

作为以上两种方式的补充,主要可以实现对第二种方式的“微调”(可以通过修改Using元素的属性来实现,如果使用Include属性,则包含命名空间,如果使用Exclude属性,则排除相关命名空间),当然,也可以实现第一种方式的所有功能,但这种应用相当少见

相关文章
|
19天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
1月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
3月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
72 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
3月前
|
开发框架 JavaScript .NET
ASP.NET Core的超级大BUG
ASP.NET Core的超级大BUG
43 0
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
65 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
36 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报

相关实验场景

更多