저는 C#으로 속도를 높이고 있습니다. 내 경험은 C++과 Java에 있습니다. 선언하고 일부 관련 필드를 초기화 할 때 "여러 가지 장소에서 동일한 코드 반복"을 줄이기 위해 사용할 수있는 트릭이 있는지 궁금합니다.C#에서 간결한 필드 초기화에 대한 팁
은 여기합니다 (UrhoSharp 3D 라이브러리를 사용) 할 싶습니다 어떤 사소한 예입니다 :
public class MyScene
{
Scene scene = new Scene();
Node camera = scene.CreateChild("Camera");
Node light = scene.CreateChild("Light");
Node model = scene.CreateChild("Model");
// etc
}
Node
필드 이니셜 라이저는 "비 정적을 참조 할 수 있기 때문에,이 컴파일되지 않습니다 필드 "scene
. 가장 간단한 해결책은 될 것 같다 : 모두 추가 Node
를 들어
public class MyScene2
{
Scene scene = new Scene();
Node camera, light, model;
MyScene2()
{
camera = scene.CreateChild("Camera");
light = scene.CreateChild("Light");
model = scene.CreateChild("Model");
}
// etc
}
, 는 내가 두 줄의 코드를 수정해야 할 코드 두 개의 추가 라인이 필요합니다. (편집 : Gusman의 제안에 따라 선언문을 한 줄로 접었습니다)이 광력을 만들기 위해 사용할 수있는 기술이 있습니까?
최근 버전의 C++에서 첫 번째 코드 조각이 작동합니다 - 필드는 엄격한 순서로 초기화되고 이전 필드를 참조 할 수 있습니다. Java에서는 외부 클래스에 scene
을 넣을 수 있고 내부 클래스에 Node
필드가있어 참조 할 수 있지만 C#에는 내부 클래스와 동일한 개념이 없습니다. (물론 언어가 "더 좋다"는 말은 아니며 단지 다르고 그 언어에 익숙합니다.)
이 특정 예에서는 MyScene
을 Scene
에서 상속 받았을 수 있습니다. 하지만 코드를 더 짧게 만들기 위해 상속을 도입하는 것에 매우 조심 스럽습니다! 그리고 모든 것이 직접 자식 인 scene
이 아니라보다 복잡한 노드 트리가 필요할 수 있습니다. 그래서 필드 초기화 레벨에서 순수하게 수행 할 수있는 것이 있는지 궁금합니다.
'노드 카메라, 광원, 모델; 코드 줄이기 비트 :) – Gusman
Doh, yes! 좋은 생각, 조금 도움이됩니다. –
저는 왜 당신이 생성자에서 많은 일을하는지에 대해 개인적으로 질문 할 것입니다. 어쩌면 당신은 장면을위한 자식 노드를 설정하는 MySceneFactory를 필요로하고, 그 각각의 필드 값을 MyScene 생성자에 주입 할 것입니다. 코드 라인이 늘어나지 만 우려 사항이 더 잘 분리됩니다. – StriplingWarrior