找到关于 C# 的2628 篇文章
223 次浏览
反射是描述代码中类型、方法和字段的元数据的过程。System.Reflection 命名空间使您可以获取有关已加载程序集及其内部元素(如类、方法和值类型)的数据。System.Reflection 中有很多类,但最常用的类是 Assembly、AssemblyName、ConstructorInfo、MethodInfo、ParameterInfo、EventInfo、PropertyInfo 和 MemberInfo。示例 static void Main(string[] args){ TypeInfo myType = typeof(TextInfo).GetTypeInfo(); IEnumerable properties = myType.DeclaredProperties; IEnumerable methods = myType.DeclaredMethods; Console.WriteLine(myType); Console.WriteLine(properties); Console.WriteLine(methods); StringBuilder strBuilder = new StringBuilder(); Console.WriteLine(); strBuilder.Append("The properties are:"); foreach (PropertyInfo p ... 阅读更多
3K+ 次浏览
将耦合(依赖)对象注入(转换)到解耦(独立)对象的过程称为依赖注入。依赖注入类型有四种:构造函数注入、Setter 注入、基于接口的注入、服务定位器注入。接口注入接口注入类似于 Getter 和 Setter DI,Getter 和 Setter DI 使用默认的 Getter 和 Setter,但接口注入使用支持接口,这是一种显式 Getter 和 Setter,它设置接口属性。示例 public interface IService{ string ServiceMethod(); } public class ClaimService:IService{ public string ServiceMethod(){ return "ClaimService is running"; } } public class AdjudicationService:IService{ public string ServiceMethod(){ ... 阅读更多
1K+ 次浏览
将耦合(依赖)对象注入(转换)到解耦(独立)对象的过程称为依赖注入。依赖注入类型有四种:构造函数注入、Setter 注入、基于接口的注入、服务定位器注入。Setter 注入Getter 和 Setter 注入使用默认的公共属性过程(例如 Gettter(get(){}) 和 Setter(set(){}))注入依赖项。示例 public interface IService{ string ServiceMethod(); } public class ClaimService:IService{ public string ServiceMethod(){ return "ClaimService is running"; } } public class AdjudicationService:IService{ public string ServiceMethod(){ return "AdjudicationService is running"; } } public class BusinessLogicImplementation{ private IService _client; public IService Client{ ... 阅读更多
472 次浏览
软件实体(如类、模块和函数)应该对扩展开放,对修改关闭。定义 - 开闭原则指出,代码的设计和编写应该以添加新功能的方式进行,同时对现有代码的更改最小化。设计应该允许以新类的方式添加新功能,尽可能保持现有代码不变。示例开闭原则之前的代码 using System; using System.Net.Mail; namespace SolidPrinciples.Open.Closed.Principle.Before{ public class Rectangle{ public int Width { get; set; } ... 阅读更多
300 次浏览
一个类应该只有一个变化的原因。定义 - 在这种情况下,职责被认为是一个变化的原因。该原则指出,如果一个类有两个变化的原因,则必须将功能分成两个类。每个类只处理一个职责,如果将来需要进行更改,则将在处理该更改的类中进行。当需要更改一个具有多个职责的类时,更改可能会影响与该类的其他职责相关的其他函数…… 阅读更多
4K+ 次浏览
使用命名空间 Newtonsoft.Json.FormattingNewtonsoft.Json.Formatting 提供格式化选项来格式化 JsonNone - 不应用特殊格式化。这是默认设置。Indented - 导致子对象根据 Newtonsoft.Json.JsonTextWriter.Indentation 和 Newtonsoft.Json.JsonTextWriter.IndentChar 设置缩进。示例 static void Main(string[] args){ Product product = new Product{ Name = "Apple", Expiry = new DateTime(2008, 12, 28), Price = 3.9900M, Sizes = new[] { "Small", "Medium", "Large" } }; string json = JsonConvert.SerializeObject(product, Formatting.Indented); Console.WriteLine(json); Product deserializedProduct = JsonConvert.DeserializeObject(json); Console.ReadLine(); } class Product{ public String[] Sizes ... 阅读更多
3K+ 次浏览
Task.WaitAll 会阻塞当前线程,直到所有其他任务完成执行。Task.WhenAll 方法用于创建一个任务,只有当所有其他任务都完成后,该任务才会完成。在第一个示例中,我们可以看到,当使用 Task.WhenAll 时,任务完成是在其他任务完成之前执行的。这意味着 Task.WhenAll 不会阻塞执行。在第二个示例中,我们可以看到,当使用 Task.WaitAll 时,任务完成只有在所有其他任务完成后才会执行。这意味着 Task.WaitAll 会阻塞执行。示例 static void Main(string[] args){ ... 阅读更多
2K+ 次浏览
如果源序列中的至少一个元素与提供的谓词匹配,则 Any() 方法返回 true。否则,它返回 false。另一方面,如果源序列中的每个元素都与提供的谓词匹配,则 All() 方法返回 true。否则,它返回 false。示例 static void Main(string[] args){ IEnumerable doubles = new List { 1.2, 1.7, 2.5, 2.4 }; bool result = doubles.Any(val => val < 1); System.Console.WriteLine(result); IEnumerable doubles1 = new List { 0.8, 1.7, 2.5, 2.4 }; bool result1 = doubles1.Any(val => val < 1); System.Console.WriteLine(result1); Console.ReadLine(); } 输出 False True 示例 static ... 阅读更多
698 次浏览
高层模块不应该依赖于低层模块。两者都应该依赖于抽象。抽象不应该依赖于细节。细节应该依赖于抽象。该原则主要关注减少代码模块之间的依赖关系。依赖倒置之前的代码示例 using System; namespace SolidPrinciples.Dependency.Invertion.Before{ public class Email{ public string ToAddress { get; set; } public string Subject { get; set; } public string Content { get; set; } public void SendEmail(){ //发送邮件 } } public class SMS{ ... 阅读更多
187 次浏览
代理模式提供了一个代理或占位符对象来控制对另一个不同对象的访问。代理对象可以以与其包含对象相同的方式使用参与者主题定义了 RealSubject 和 Proxy 的通用接口,以便可以在预期 RealSubject 的任何地方使用 Proxy。RealSubject 定义了 Proxy 代表的具体对象。Proxy 维护对 RealSubject 的引用并控制对其的访问。它必须实现与 RealSubject 相同的接口,以便两者可以互换使用可能。如果您曾经需要更改…… 阅读更多