找到 2628 篇文章,关于 C#
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 注入使用默认的公共属性过程(例如 Getter(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 相同的接口,以便两者可以互换使用可能。如果您曾经需要更改…… 阅读更多