이 인터페이스를 사용해보십시오 (I 비주얼 스튜디오 2012을 사용하고 있습니다). interface
은 abstract class
과 같이 작동하지만이를 구현하는 클래스가 "fleshed out"할 메서드 또는 속성 정의 만 포함 할 수 있습니다. 그런 다음 클래스는 필요한만큼의 인터페이스를 구현할 수 있습니다. IEnumerable
은 목록, 사전 및 배열 모두가 공통적 인 메서드 집합을 공유하여 foreach
에 사용되도록 허용하거나 IDisposable
이 클래스를 using
에 선언하는 방법을 허용하는 방법을 살펴보십시오.
여러 응용 프로그램의 사용자 구성에서 표시 스타일 설정을 가져 오는 일련의 잉크 텍스트 상자 컨트롤을 만들었으므로 IInkInputSettings 인터페이스에서 해당 설정을 가져 와서 모든 응용 프로그램에서 해당 인터페이스를 구현했습니다 'UserConfig 클래스.
또는, 싱글의 방법으로 글로벌 구성을 달성 할 수 :
public class GlobalConfig{
/* your configuration properties here */
private static GlobalConfig instance = null;
public static GlobalConfig Instance{
get{
if(instance == null) instance=new GlobalConfig();
return instance;
}
}
private GlobalConfig(){ /* set default property values */ }
}
이것은 정적 멤버와 정적 클래스보다 낫다을, 그것은 단지 당신이 그것을 처음 사용할 때 인스턴스화되기 때문이다. 이 도움이
public abstract class MyBase
{
// This is the .NET class you're inheriting from, just putting it as a placeholder.
}
public class MyReader : MyBase
{
private static readonly IMySettings settings = MySettings.Instance;
}
public class MyWriter : MyBase
{
private static readonly IMySettings settings = MySettings.Instance;
}
internal interface IMySettings
{
// Define your setting's properties, such as delimiter character.
}
internal sealed class MySettings : IMySettings
{
private MySettings()
{
}
public static IMySettings Instance
{
get
{
return Nested.Instance;
}
}
// Implement your setting's properties, such as delimiter character.
private static class Nested
{
private static readonly IMySettings instance = new MySettings();
// Explicit static constructor to tell C# compiler not to mark type as beforefieldinit
static Nested()
{
}
public static IMySettings Instance
{
get
{
return instance;
}
}
}
}
희망 :
감사합니다. 나는 지금까지 이걸 신중하게 검토 할 기회를 얻지 못했다. 솔직히이 코드의 대부분이 왜 필요한지 이해할 수 없습니다. 'MyReader'와'MyWriter'의 모든 인스턴스가'MySettings'의 동일한 인스턴스를 참조하여 나타나기 때문에'MySettings'을 정적으로 만들고 그것을 직접 참조하지 않는 것이 어떻습니까? 왜 모든 인터페이스, 상속 및 개인 클래스가 필요합니까? –
단위 테스트 가능성, 느슨한 결합, 필요하면 객체 상속 기능이 있습니다. 그 중 일부입니다. 필자는 tranceporter를 사용하여 생성자를 통해 주입 할 가능성이 높지만 .NET FCL이하는 것과 다른 것이므로 몇 가지 모범 사례를 통해이를 에뮬레이션하려고했습니다. –