IT story

C #의 부분 인터페이스

hot-time 2021. 1. 6. 20:23
반응형

C #의 부분 인터페이스


C #은 부분 인터페이스를 허용합니까? 즉, ManagerFactory1.cs 클래스에서

public partial interface IManagerFactory
{
    // Get Methods
    ITescoManager GetTescoManager();
    ITescoManager GetTescoManager(INHibernateSession session);
}

ManagerFactory.cs 클래스에는 다음이 있습니다.

public partial interface IManagerFactory
{
    // Get Methods
    IEmployeeManager GetEmployeeManager();
    IEmployeeManager GetEmployeeManager(INHibernateSession session);
    IProductManager GetProductManager();
    IProductManager GetProductManager(INHibernateSession session);
    IStoreManager GetStoreManager();
    IStoreManager GetStoreManager(INHibernateSession session);
}

ManagerFactory 및 ManagerFactory1은 모두 동일한 어셈블리에 있습니다.


가장 간단한 방법은 시도하는 것입니다. :)

그러나 예, 부분 인터페이스가 허용됩니다.

partial수정 자의 유효한 위치 (C # 3.0 사양 참조 포함) :

  • 클래스 (10.1.2)
  • 구조체 (11.1.2)
  • 인터페이스 (13.1.2)
  • 메서드 (C # 3.0 +) (10.2.7; 10.6.8)

스펙의 섹션 10.2에는 부분 유형에 대한 대부분의 일반 세부 사항이 포함되어 있습니다.

잘못된 위치 :

  • 열거 형
  • 대표자

하지만 중요한 질문은 왜일까요?

자동 생성 코드를 확장 할 수 있도록 부분 클래스가 있습니다. VS는 양식 파일, 코드 숨김 또는 Linq to SQL 접근자를 생성 할 수 있으며 부분을 사용하여 확장 할 수 있습니다.

일반적으로 가치가있는 것보다 더 많은 혼란을 야기하는 클래스 (또는이 경우 인터페이스)를 분할하기 위해 부분을 사용하는 것을 피할 것입니다.

이 경우에는 이것이 여러 파일에 걸쳐 있어야하는 이유를 조사 할 것입니다. 팩토리 패턴 인터페이스는 코드를 통해 추적을 더 복잡하게 만들 수 있지만 여기서는 여러 파일을 통해 추적하게됩니다.


네, 그렇습니다.

MSDN의 부분 클래스 및 메서드 (C # 프로그래밍 가이드)

제한 사항 :

  • 동일한 유형의 일부인 모든 부분 유형 인터페이스 정의는 다음을 사용하여 수정해야합니다. partial
  • 부분 수정자는 키워드 바로 앞에만 나타날 수 있습니다 interface.
  • 동일한 유형의 일부를 의미하는 모든 부분 유형 정의는 동일한 어셈블리와 동일한 모듈 (.exe 또는 .dll 파일)에 정의되어야합니다.

부분 인터페이스는 코드 생성이 관련 될 때 기본적으로 사용됩니다. 예를 들어 인터페이스의 한 부분이 생성되고 다른 부분은 사용자가 작성한 경우입니다.


예, 그렇습니다 .


인터페이스를 부분적으로 만들기 전에 두 번 생각하십시오. 두 개의 itnerface로 분할하는 것이 더 낫습니까?

인터페이스를 작고 집중적으로 유지하십시오. 부분은 코드 냄새입니다.


좋은.

나는 이것이 냄새가 될 수 있다는 데 동의하지만 여전히 그것을 할 한 가지 이유를 생각할 수 있습니다.

현재 WPF 및 Silverlight 용 응용 프로그램 MVVM 프레임 워크를 작업 중입니다. 내가 만난 것은 WPF와 Silverlight가 너무 다르기 때문에 코드 전체에서 정의를 사용하는 것보다 부분 인터페이스 / 클래스가 실제로 두 프레임 워크 간의 차이점을 분리하고 코드를 깔끔하고 거의 단일 소스로 유지할 수 있다는 것입니다.


See the docs which state that it can be used on classes, structs or interfaces


Short and simple: YES!


Yes, it does. Are both partial interfaces defined in the same namespace?

ReferenceURL : https://stackoverflow.com/questions/734112/partial-interface-in-c-sharp

반응형