找到 2628 篇文章 关于 C#

什么是接口隔离原则以及如何在 C# 中实现它?

Nizamuddin Siddiqui
更新于 2020-11-25 12:16:41

320 次查看

客户端不应该被迫依赖于它们不使用的接口。接口隔离原则指出,客户端不应该被迫实现它们不使用的接口。与一个臃肿的接口相比,更偏向于多个小的接口,每个接口都基于一组方法,每个接口服务于一个子模块在接口隔离之前示例public interface IProduct {    int ID { get; set; }    double Weight { get; set; }    int Stock { get; set; }    int Inseam { get; set; }    int WaistSize { get; set; } } public class Jeans : IProduct {    public int ID { ... 阅读更多

什么是外观模式以及如何在 C# 中实现它?

Nizamuddin Siddiqui
更新于 2020-11-25 12:14:49

124 次查看

外观模式是在更复杂的结构之上构建的一个简单的结构。参与者子系统是任何实现功能的类或对象,但可以通过外观模式“包装”或“覆盖”以简化接口。外观模式是子系统之上的抽象层,并且知道要将适当的工作委派给哪个子系统。外观模式非常通用,几乎适用于每个主要的应用程序,尤其是在我由于各种原因无法重构或修改应用程序某些部分的应用程序中。示例public class HomeFacade {    LightsFacade light;    MusicSystemFacade musicSystem;    AcFacade ac;    public HomeFacade() {     ... 阅读更多

什么是里氏替换原则以及如何在 C# 中实现它?

Nizamuddin Siddiqui
更新于 2020-11-25 12:12:32

266 次查看

派生类型必须完全可以替换其基类型。定义:我们应该能够将子类视为父类。从本质上讲,这意味着所有派生类都应保留其父类的功能,并且不能替换父类提供的任何功能。在里氏替换之前示例public class Ellipse {    public double MajorAxis { get; set; }    public double MinorAxis { get; set; }    public virtual void SetMajorAxis(double majorAxis){       this.MajorAxis = majorAxis;    }    public virtual void SetMinorAxis(double minorAxis){       this.MajorAxis = minorAxis;    }    public ... 阅读更多

为什么单例类在 C# 中总是密封的?

Nizamuddin Siddiqui
更新于 2020-11-25 12:08:03

1K+ 次查看

sealed 关键字表示无法从该类继承。将构造函数声明为私有意味着无法创建该类的实例。您可以拥有一个具有私有构造函数的基类,但仍然可以从该基类继承,定义一些公共构造函数,并有效地实例化该基类。构造函数不会被继承(因此派生类不会仅仅因为基类具有所有私有构造函数而拥有所有私有构造函数),并且派生类始终首先调用基类构造函数。将类标记为 sealed 可以防止某人轻松绕过您精心构建的单例类,因为它可以防止某人从该类继承。示例static ... 阅读更多

如何在 C# 中获取目录内所有文件、子文件及其大小?

Nizamuddin Siddiqui
更新于 2020-11-25 12:05:22

1K+ 次查看

要获取文件,C# 提供了一个方法 Directory.GetFilesDirectory.GetFiles 返回与指定搜索模式匹配的所有文件(包括其路径)的名称,并且可以选择搜索子目录。在下面的示例中,* 匹配该位置的零个或多个字符。SearchOption TopDirectoryOnly。仅搜索顶级目录SearchOption AllDirectories 。搜索所有顶级目录和子目录FileInfo 获取文件信息,如 Length、name示例 1static void Main (string[] args) {    string rootPath = @"C:\Users\Koushik\Desktop\TestFolder";    var files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);    foreach (string file in files) {       Console.WriteLine(file);    }    Console.ReadLine (); }输出C:\Users\Koushik\Desktop\TestFolder\TestFolderMain\TestFolderMain.txt ... 阅读更多

如何在 C# 中实现 IDisposable 设计模式?

Nizamuddin Siddiqui
更新于 2020-11-25 12:03:45

2K+ 次查看

当我们需要处理非托管对象时,应该使用 IDisposable 设计模式(或 Dispose 模式)。要实现 IDisposable 设计模式,直接或间接处理非托管对象的类应实现 IDisposable 接口。并在 IDisposable 接口内实现声明的方法 Dispose。我们不直接处理非托管对象。但我们处理托管类,这些类直接处理非托管对象。例如,文件句柄、连接字符串、HTTP 流等。此模式的重要方面在于它使继承类更容易遵循 IDisposable 设计模式。这是因为... 阅读更多

如何在 C# 中实现空对象模式?

Nizamuddin Siddiqui
更新于 2020-11-25 12:00:25

126 次查看

空对象模式帮助我们编写干净的代码,尽可能避免空检查。使用空对象模式,调用者不必关心它们是否有空对象或真实对象。并非在所有情况下都可以实现空对象模式。有时,它可能会返回空引用并执行一些空检查。示例static class Program{    static void Main(string[] args){       Console.ReadLine();    }    public static IShape GetMobileByName(string mobileName){       IShape mobile = NullShape.Instance;       switch (mobileName){         ... 阅读更多

什么是 C# 中的连接池以及如何实现它?

Nizamuddin Siddiqui
更新于 2020-11-25 11:56:02

736 次查看

这些用于导入命名空间(或为命名空间或类型创建别名)。这些位于文件的顶部,在任何声明之前。using System; using System.IO; using WinForms = global::System.Windows.Forms; using WinButton = WinForms::Button;using 语句确保即使在创建对象并调用方法、属性等时发生异常,也会调用 Dispose()。Dispose() 是 IDisposable 接口中存在的一个方法,它有助于实现自定义垃圾回收。换句话说,如果我们正在执行一些数据库操作(插入、更新、删除),但不知何故发生了异常,那么在这里 using 语句关闭... 阅读更多

如何使用 C# 获取以字节为单位的可读文件大小缩写?

Nizamuddin Siddiqui
更新于 2020-11-25 11:54:27

393 次查看

要获取目录,C# 提供了一个方法 Directory.GetDirectoriesDirectory.GetDirectories 返回指定目录中与指定搜索模式匹配的子目录(包括其路径)的名称,并且可以选择搜索子目录。要获取文件,C# 提供了一个方法 Directory.GetFilesDirectory.GetFiles 返回与指定搜索模式匹配的所有文件(包括其路径)的名称,并且可以选择搜索子目录要获取文件长度,C# 提供了一个属性 Length示例static void Main(string[] args) {    string rootPath = @"C:\Users\Koushik\Desktop\TestFolder";    var files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);    foreach (string file in files) {       long size = ... 阅读更多

如何在 C# 中捕获异步 void 方法抛出的异常?

Nizamuddin Siddiqui
更新于 2020-11-25 11:53:15

806 次查看

在同步 C# 代码中,异常会向上传播到调用堆栈,直到到达可以处理异常的适当 catch 块。但是,异步方法中的异常处理并不那么简单。C# 中的异步方法可以有三种类型的返回值:void、Task 和 Task。当异步方法中发生异常时,该方法的返回类型为 Task 或 Task,异常对象将包装在 AggregateException 的实例中并附加到 Task 对象。如果抛出多个异常,则所有异常都存储在 Task 对象中。示例 1static async Task Main(string[] args) ... 阅读更多

广告