기본 기능을 제공하기 위해 인터페이스에 대한 확장 메서드를 만드는 기술을 좋아합니다. 아주 편리한 장소 중 하나는 단위 테스트를 위해 더미 클래스에 고기를 넣는 것입니다.C# 인터페이스의 기본 속성 구현을 만들 수있는 방법이 있습니까
예를 들어,
public interface IEmployee
{
IAddress Address { get; set; }
IAddress GetAddress();
void SetAddress(IAddress address);
}
public class Employee : IEmployee
{
// Complex production stuff here (causes DB access)
}
public class TestEmployee : IEmployee
{
// Simple unit testing stuff goes here (in memory only)
}
public static class EmployeeExtensions
{
public static IAddress GetAddress(this IEmployee employee)
{
// Some sort of magic (maybe using IOC)
// 'employee' can be either of type 'Employee' or of type 'TestEmployee'
}
public static void SetAddress(this IEmployee employee, IAddress address)
{
// Again with the magic
}
}
좋아, 아마 좋은 예하지만 당신은 아이디어를 얻을 ...
열쇠는 getAddress에와 SetAddress이 코드없이 모두 직원 및 TestEmployee에 대해 호출 할 수 있다는 것입니다 그들 중 누구로부터 지원. 불행히도 이것은 C#보다 Java와 조금 비슷합니다. 두 가지 모두에 대해 정말로하고 싶은 것은 Address 속성을 직접 사용하여 메서드가 수행하는 것과 동일한 모든 마법을 수행하는 것입니다. 필자가 피하고자하는 것은 구체적 클래스에서 코드를 작성해야한다는 것입니다 (특히 TestEmployee에서).
IEmployee의 Address 속성에 대한 기본 구현을 제공하는 방법이 있습니까?
나는 C# 속성이 실제로 후드 아래의 메소드라는 것을 알고있다. 어떻게 든 구현을 제공하는 어쨌든?
다른 .NET 언어로도 처리 할 수 있습니까?
추상 기본 클래스를 사용하고 해당 수준에서 기본 구현을 제공 할 수 있습니다. – LukeH
큰 제안 LukeH. 불행히도, 나는 이미 다른 클래스 (아마이 예제에서는 'Person')로부터 상속 받고있을 것입니다. 또한 각각 기본값이있는 여러 인터페이스를 상속 할 수 있습니다. C#은 하나의 클래스에서 상속을 허용합니다. – Justin