Json.NET은 XmlNodeConverter를 사용하여 JSON을 XML로 또는 그 반대로 변환하는 것을 지원합니다. 요소, 속성, 텍스트, 주석, 문자 데이터, 처리 명령, 네임스페이스 및 XML 선언은 둘 사이를 변환할 때 모두 보존됩니다. XmlNode 직렬화 JsonConvert에는 JSON과 XML 간의 변환을 위한 두 가지 도우미 메서드가 있습니다. 첫 번째는 SerializeXmlNode()입니다. 이 메서드는 XmlNode를 가져와 JSON 텍스트로 직렬화합니다. XmlNode 역직렬화 JsonConvert의
결합(종속) 개체를 분리(독립) 개체에 주입(변환)하는 프로세스를 종속성 주입이라고 합니다. 의존성 주입 유형 DI에는 네 가지 유형이 있습니다. 1.생성자 주입 2.세터 주입 3.인터페이스 기반 주입 4.서비스 로케이터 주입 생성자 주입 생성자는 매개변수화된 계약자를 통해 노출된 매개변수를 인터페이스하는 데 사용됩니다. 다른 클래스의 개체 생성으로 계약자 메서드를 통해 종속성을 주입합니다. 세터 주입 Getter 및 Setter 주입은 Gettter(get(){}) 및 Setter(set(){})와 같은 기본 공개
파일을 복사하기 위해 C#은 File 메서드를 제공합니다. 복사 파일. 복사에 2개의 오버로드가 있습니다. 복사(문자열, 문자열) - 기존 파일을 새 파일로 복사합니다. 같은 이름의 파일은 덮어쓸 수 없습니다. 복사(문자열, 문자열, 부울) 기존 파일을 새 파일에 복사합니다. 같은 이름의 파일을 덮어쓸 수 있습니다. Directory.GetFiles 지정된 검색 패턴과 일치하는 모든 파일(경로 포함)의 이름을 반환하고 선택적으로 하위 디렉터리를 검색합니다. 예 static void Main (string[] args) {
FluentValidation은 강력한 형식의 유효성 검사 규칙을 빌드하기 위한 .NET 라이브러리입니다. 유효성 검사 규칙을 작성하기 위해 유창한 인터페이스와 람다 식을 사용합니다. 도메인 코드를 정리하고 더 응집력 있게 만들 뿐만 아니라 유효성 검사 논리를 찾을 수 있는 단일 장소를 제공합니다. 유창한 유효성 검사를 사용하려면 아래 패키지를 설치해야 합니다. <PackageReference Include="FluentValidation" Version="9.2.2" /> 예시 1
특정 속성에 대한 유효성 검사 규칙을 지정하려면 RuleFor 메서드를 호출하여 유효성을 검사하려는 속성을 나타내는 람다 식을 전달합니다. p.DateOfBirth) 유효성 검사기를 실행하려면 유효성 검사기 개체를 인스턴스화하고 Validate 메서드를 호출하여 유효성 검사할 개체를 전달합니다. ValidationResult 결과 =validator.Validate(사람); Validate 메서드는 ValidationResult 개체를 반환합니다. 여기에는 두 개의 속성이 포함됩니다. 유효함 - 유효성 검사가 성공했는지 여부
MaxLength 유효성 검사기 특정 문자열 속성의 길이가 지정된 값보다 길지 않은지 확인합니다. 문자열 속성에서만 유효합니다. 문자열 형식 인수: {PropertyName} =유효성을 검사하는 속성의 이름 {MaxLength} =최대 길이 {TotalLength} =입력된 문자 수 {PropertyValue} =속성의 현재 값 최소 길이 검사기 특정 문자열 속성의 길이가 지정된 값보다 긴지 확인합니다. 문자열 속성에서만 유효합니다. {PropertyName} =유효성을 검사하는 속성의 이름 {MinLength}
IEnumerable은 IEnumerator 인터페이스를 반환하는 단일 메서드 GetEnumerator()를 정의하는 인터페이스입니다. 열거할 수 있는 모든 비제네릭 컬렉션의 기본 인터페이스입니다. 이것은 IEnumerable을 foreach 문과 함께 사용할 수 있음을 구현하는 컬렉션에 대한 읽기 전용 액세스에 대해 작동합니다. 목록 클래스는 인덱스로 액세스할 수 있는 개체 목록을 나타냅니다. System.Collection.Generic 네임스페이스 아래에 있습니다. List 클래스는 정수, 문자열 등과 같은 다양한 유형의
디렉토리를 가져오기 위해 C#은 Directory.GetDirectories 메소드를 제공합니다. Directory.GetDirectories 메서드는 지정된 디렉터리의 지정된 검색 패턴과 일치하는 하위 디렉터리의 이름(경로 포함)을 반환하고 선택적으로 하위 디렉터리를 검색합니다. 아래 예에서 *는 해당 위치의 0개 이상의 문자와 일치합니다. SearchOption TopDirectoryOnly . 최상위 디렉토리만 가져오고 SearchOption AllDirectories . 모든 최상위 디렉토리와 하위 디렉토리를 가져옵니다.
동기 C# 코드에서 예외는 예외를 처리할 수 있는 적절한 catch 블록에 도달할 때까지 호출 스택 위로 전파됩니다. 그러나 비동기 메서드에서 예외 처리는 간단하지 않습니다. C#의 비동기 메서드는 void, Task 및 Task라는 세 가지 유형의 반환 값을 가질 수 있습니다. 반환 유형이 Task 또는 Task인 비동기 메서드에서 예외가 발생하면 예외 개체가 AggregateException 인스턴스에 래핑되고 Task 개체에 연결됩니다. 여러 예외가 발생하면 모두 Task 개체에 저장됩니다. 예시 1 static async
디렉터리를 가져오려면 C#에서 Directory.GetDirectories 메서드를 제공합니다. Directory.GetDirectories는 지정된 디렉터리의 지정된 검색 패턴과 일치하는 하위 디렉터리의 이름(경로 포함)을 반환하고 선택적으로 하위 디렉터리를 검색합니다. 파일을 가져오기 위해 C#은 Directory.GetFiles 메서드를 제공합니다. Directory.GetFiles는 지정된 검색 패턴과 일치하는 모든 파일(경로 포함)의 이름을 반환하고 선택적으로 하위 디렉터리를 검색합니다. 파일 길이를 얻기 위해 C#
네임스페이스를 가져오거나 네임스페이스 또는 유형에 대한 별칭을 만드는 데 사용됩니다. 선언 전에 파일의 맨 위에 위치합니다. using System; using System.IO; using WinForms = global::System.Windows.Forms; using WinButton = WinForms::Button; using 문은 개체를 생성하고 메서드, 속성 등을 호출할 때 예외가 발생하더라도 Dispose()가 호출되도록 합니다. Dispose()는 사용자 지정 가비지 컬렉션을 구현하는 데 도움이 되는 ID
null 객체 패턴은 가능한 경우 null 검사를 피하는 깨끗한 코드를 작성하는 데 도움이 됩니다. null 객체 패턴을 사용하면 호출자가 null 객체를 가지고 있는지 아니면 실제 객체를 가지고 있는지 신경 쓸 필요가 없습니다. 모든 시나리오에서 null 객체 패턴을 구현하는 것은 불가능합니다. 때로는 null 참조를 반환하고 일부 null 검사를 수행할 가능성이 있습니다. 예 static class Program{ static void Main(string[] args){ &nbs
관리되지 않는 개체를 처리해야 하는 경우 IDisposable 디자인 패턴(또는 Dispose 패턴)을 사용해야 합니다. IDisposable 디자인 패턴을 구현하기 위해서는 관리되지 않는 개체를 직간접적으로 처리하는 클래스에서 IDisposable 인터페이스를 구현해야 합니다. 그리고 IDisposable 인터페이스 내부에 선언된 Dispose 메서드를 구현해야 합니다. 우리는 관리되지 않는 개체를 직접 다루지 않습니다. 그러나 우리는 관리되지 않는 개체를 직접 처리하는 관리되는 클래스를 다룹니다. 예를 들어, 파일 핸들러, 연
파일을 가져오기 위해 C#은 Directory.GetFiles 메서드를 제공합니다. Directory.GetFiles 지정된 검색 패턴과 일치하는 모든 파일(경로 포함)의 이름을 반환하고 선택적으로 하위 디렉터리를 검색합니다. 아래 예에서 *는 해당 위치의 0개 이상의 문자와 일치합니다. SearchOption TopDirectoryOnly. 상위 디렉토리만 검색 SearchOption AllDirectories .모든 상위 디렉토리 및 하위 디렉토리 검색 FileInfo는 길이, 이름과 같은 파일 정보를 가져옵니다. 예
Sealed 키워드는 클래스를 상속할 수 없음을 의미합니다. 생성자를 private로 선언하면 클래스의 인스턴스를 생성할 수 없습니다. 개인 생성자가 있는 기본 클래스를 가질 수 있지만 여전히 해당 기본 클래스에서 상속하고 일부 공용 생성자를 정의하고 해당 기본 클래스를 효과적으로 인스턴스화합니다. 생성자는 상속되지 않으며(따라서 파생 클래스에는 기본 클래스가 있기 때문에 모든 private 생성자가 없습니다) 해당 파생 클래스는 항상 기본 클래스 생성자를 먼저 호출합니다. 클래스를 봉인으로 표시하면 누군가가 클래스에서 상속을
파생 유형은 기본 유형을 완전히 대체할 수 있어야 합니다. 정의: 자식 클래스를 부모 클래스처럼 취급할 수 있어야 합니다. 본질적으로 이것은 모든 파생 클래스가 부모 클래스의 기능을 유지해야 하며 부모가 제공하는 기능을 대체할 수 없음을 의미합니다. 리스코프 교체 전 public class Ellipse { public double MajorAxis { get; set; } public double MinorAxis { get; set; } public vir
Facade 패턴은 더 복잡한 구조 위에 놓인 단순한 구조입니다. 참가자 하위 시스템은 기능을 구현하지만 인터페이스를 단순화하기 위해 Facade에 의해 래핑되거나 덮어질 수 있는 클래스 또는 개체입니다. Facade는 하위 시스템 위의 추상화 계층이며 적절한 작업을 위임할 하위 시스템을 알고 있습니다. Facade 패턴은 매우 일반적이어서 거의 모든 주요 앱, 특히 다양한 이유로 해당 앱의 일부를 리팩토링하거나 수정할 수 없는 앱에 적용됩니다. 예시 public class HomeFacade { Lig
클라이언트가 사용하지 않는 인터페이스에 강제로 의존해서는 안 됩니다. 인터페이스 분리 원칙은 클라이언트가 사용하지 않는 인터페이스를 강제로 구현해서는 안 된다고 명시하고 있습니다. 하나의 팻 인터페이스 대신 여러 개의 작은 인터페이스가 메서드 그룹을 기반으로 선호되며, 각 인터페이스는 하나의 하위 모듈을 제공합니다. 인터페이스 분리 전 예시 public interface IProduct { int ID { get; set; } double Weight { get; set; } &nb
프록시 패턴은 서로 다른 다른 개체에 대한 액세스를 제어하기 위해 서로게이트 또는 자리 표시자 개체를 제공합니다. Proxy 개체는 포함 개체와 동일한 방식으로 사용할 수 있습니다. 참가자 Subject는 RealSubject가 예상되는 모든 곳에서 Proxy를 사용할 수 있도록 RealSubject와 Proxy에 대한 공통 인터페이스를 정의합니다. RealSubject는 Proxy가 나타내는 구체적인 개체를 정의합니다. 프록시는 RealSubject에 대한 참조를 유지 관리하고 이에 대한 액세스를 제어합니다. RealSub
고수준 모듈은 저수준 모듈에 의존해서는 안 됩니다. 둘 다 추상화에 의존해야 합니다. 추상화는 세부사항에 의존해서는 안 됩니다. 세부 사항은 추상화에 따라 달라집니다. 이 원칙은 주로 코드 모듈 간의 종속성을 줄이는 것과 관련이 있습니다. 예시 종속성 반전 이전의 코드 using System; namespace SolidPrinciples.Dependency.Invertion.Before{ public class Email{ public string ToAddress