모든 최신 업데이트가있는 기본 구성에서 Visual Studio Community 2017의 최신 버전을 사용하고 있습니다.컴파일러에서 최적화 한 클래스에 하드 코딩 된 배열이 있습니까?
다른 속성으로 항목을 처리하는 시스템을 작성 중입니다. 여기에는 하나 이상의 데이터 멤버를 필요로하는 각 속성과이를 처리하는 고유 한 기능이있는 속성의 조합이 포함될 수 있습니다. 나를 (또는 모든 개발자) 신속하게 새로운 기능을 구현하고 작성해야 할 코드의 양을 줄이기 위해, 나는 상속을 사용하고 있습니다.
데이터와 함수를 제공하는 각 하위 클래스는 본질적으로 정적 인 특정 데이터가 필요하지만 C#에서는 정적 멤버를 재정의 할 수 없습니다.
public class BaseClass
{
public abstract string name { get; }
public abstract Color color { get; }
public abstract string[] info { get; }
public abstract OtherClass[] otherClasses { get; }
}
public class SubClass : BaseClass
{
public override string name { get { return "flip flops"; } }
public override Color color { get { return Color.FromArgb(255, 0, 255, 255); } }
public override string[] info { get { return new string[] { "a", "b", "c" }; } }
public override OtherClass[] otherClasses {
get {
return new otherClass[] {
new OtherClass("hard"),
new OtherClass("coded"),
new OtherClass("data") }
}
};
}
당신이 값 형식은 일부 클래스이며, 일부의 배열 인,있는 회원의 일부를 볼 수 있듯이 : 내 솔루션은 다음과 같이 자신의 getter 메소드의 기본 클래스 멤버 그냥 하드 코드 데이터를 무시하는 것입니다 수업. 내 관심사는 1000 클래스의 인스턴스를 가질 경우 런타임 환경은 각 클래스에 대해 각 멤버의 고유 한 인스턴스를 생성한다는 것입니다. 각 데이터가 동일하기 때문에 이것은 완전히 불필요합니다. 색상은 구조체이므로 값 유형이기 때문에 어떤 반응을 보일지 확실하지 않습니다.
다른 클래스를 사용하여 이미 문제를 해결하려고했습니다. SubClassData는 멤버를 저장하고 각 SubClass는 클래스 생성자를 통해 할당 된 SubClassData를 참조합니다. SubClassData 클래스는 큰 정적 배열에 저장됩니다. 첫째, 이것을 사용하여 잘못된 SubClassData를 생성시 SubClass에 할당 할 수 있습니다. 더 중요한 것은이 패턴이 완전히 부 자연스럽게 느껴지는 기능과 데이터를 분리한다는 것입니다. 나는 그것들이 근본적으로 같은 문제라고 생각한다.
현재 나는 기능을 구현하는 것으로 첫 번째 방법을 사용하여 일하고 있어요. 나는이 마이크로 최적화 C#을이 돌봐 또는이 있다면 더 나은 디자인 패턴이를 달성하기 위해 사용할 수 있지만, 모든 피드백에 감사드립니다 :) 당신은 단순히 대중의 데이터를 반환 할 수
인스턴스 property-getters는 개인 정적 멤버를 반환 할 수 있습니다. 값 유형이 복사되지만 값 유형은 중요합니다. – Blorgbeard
각 구성원이 액세스 될 때 고유 값이 작성됩니다. 누군가가 그 배열 (이 경우 회원은 더 이상 기대 요소를 반환하지 않을 것이다) 중 하나를 수정하지 않습니다 증명할 수있는 런타임은 확실히 배열 생성을 최적화 할 수 없습니다. 이것이 변경 가능한 콜렉션을 반환하지 않는 한 가지 이유입니다. –