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属性,则排除相关命名空间),当然,也可以实现第一种方式的所有功能,但这种应用相当少见

相关文章
|
21天前
|
存储 JSON 开发工具
Visual Studio编程效率提升技巧集(提高.NET编程效率)
Visual Studio编程效率提升技巧集(提高.NET编程效率)
Visual Studio编程效率提升技巧集(提高.NET编程效率)
|
10天前
|
开发框架 .NET C#
【Azure Developer】C# / .NET 静态函数中this关键字的作用
在C#中,`this`关键字用于扩展方法,允许向已有类型添加功能而不修改其源代码。扩展方法必须在静态类中定义,且第一个参数使用`this`修饰,如`public static XElement AcquireElement(this XContainer container, string name, bool addFirst = false)`。这种方式增强了代码的可读性和类型的安全性,尤其在处理第三方库时。
|
1月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
43 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
23天前
|
人工智能 开发框架 Devops
.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。
【7月更文挑战第4天】.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。此外,讨论了.NET如何通过性能优化、DevOps集成、AI与ML支持以及开源策略应对未来挑战,为开发者提供强大工具,共创软件开发新篇章。
21 3
|
1月前
|
Java C# 数据安全/隐私保护
|
1月前
|
Cloud Native API C#
C#的现代化:.NET Core引领的技术革命
【6月更文挑战第9天】`.NET Core引领C#现代化,实现跨平台革命,提升性能并支持云原生应用。异步编程模型优化体验,统一API简化开发流程。C#应用场景扩展,开发效率提高,技术创新加速,预示其未来在技术领域将持续发挥关键作用。`
39 10
|
21天前
|
人工智能 开发框架 调度
C#/.NET这些实用的技巧和知识点你都知道吗?
C#/.NET这些实用的技巧和知识点你都知道吗?
|
1月前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
419 3
|
25天前
|
开发框架 JSON .NET
|
1月前
|
XML 开发框架 .NET
【.NET Core】常见C#代码约定
【.NET Core】常见C#代码约定
25 5