2016-11-16 14 views
0

내 질문은 : "classA"에서 호출 할 때 "classA"의 특정 필드를 검색하는 정적 클래스 "classB"에서 정적 메서드 "meth1"을 정의 할 수 있습니까? 어떤 클래스가 정의되어 있지 않습니까?) 더 나은 설명하려고 :이 같은 작업을 수행해야합니다정적 메서드에서 이름으로 개체를

public class classA 
{ 
    string someText; 
    int anInt; 
    bool trueOrFalse; 

    public classA() 
    { 
    ... 
    ... 
    var variable = classB.meth1("variableName"); 
    ... 
    ... 
    } 
} 

public static classB 
{ 
    public static object meth1(string name) 
    { 
    ... 
    ... //use "name" to find the variable with that name in the class from which "meth1" is called. 
    ... 
    } 
} 

그 나는 같은 라인에 의한 .txt 파일에 포함 된 변수의 "마지막 실행 값"의 백업 서면 라인을 읽을 수 있기 때문에 "변수 이름 = 값". 그래서 .txt를 읽고 ("변수 이름"; "값") 포함하는 해시 테이블 "backupHashtable"을 만든 다음 "변수 이름"문자열을 검색하여 "값"으로 재설정하려고합니다. 당신의 누군가가 더 나은 절차를 알고 있다면 나는 듣고 있습니다. 어쩌면 사전을 사용했을까요?

감사합니다.

이 좋아 UPDATING

, 지금은 내가하고 싶은 것을 명확 생각이 : 내 메인 클래스 "를 ClassA"별도의 클래스 "ClassB가"을 구현하고자합니다. 이 새 클래스에서는 별도의 스레드에서 실행되는 "meth1"메서드를 사용하여 "classA"에 속한 일부 변수의 상태를 매 10 초마다 저장합니다. "meth1"이 저장해야하는 변수가 무엇인지 알려주기 위해이 변수의 이름 (형식이 "string"인 목록)을 사용하고 싶습니다.이 변수의 유일한 방법은 아닙니다. .

왜 내가이 작업을 별도의 스레드에서하고 싶은지 궁금한 점은 내 응용 프로그램이 여러 카메라의 라이브 스트림 이미지에서 일부 개체의 일부 인식 작업을 수행 한 후 보조 작업을 다음과 같이 많이 격리해야한다는 것입니다. 가능한 주요 코드에서 실행 속도를 높이십시오.

이제 아마도 내가 전에 말했던 것이 더 이해할 수있을 것입니다.

+0

시리얼 라이저를 구현하려고합니까? 왜 기존의 것을 사용하지 않습니까? – Maarten

+2

혼란 스럽네요. 왜 당신이 그것을 호출하는 클래스에있는 값을 되찾기 위해'meth1'이 필요한가요? 두 클래스 중 무엇을하려고하는지 보여주는 샘플 코드를 더 제공 할 수 있습니까? –

+0

@Maarten 고맙습니다. 그것은 편리하게 올 것이다. 하지만 이해할 수 있듯이 직렬화는 응용 프로그램의 현재 상태를 저장하는 도구 일 뿐이지 만이 경우 하나의 컨테이너로 그룹화 된 다양한 유형의 변수가 필요합니다. – Andrea

답변

1

예.하지만 A의 인스턴스에 대한 참조도 전달해야합니다. 그런 다음 리플렉션을 사용하여 속성을 가져 오거나 설정하십시오. 내가 클래스에 TEXTFILE의 값을 얻을 수 있다면

public static void Meth1(object obj, string propertyName) 
{ 
    var prop = obj.GetType().GetProperty(propertyName); 
    var value = prop.GetValue(obj); 
    ... 
} 

, 나는 내가 먼저 사전에 그들을로드하고 모든 속성을 하나씩 설정 거라고 생각합니다. (아마도 수백 개의 속성이없는 한). 리플렉션을 사용할 때 텍스트 파일에 이 아닌 속성의 이름이 포함될 가능성이 있습니다. 외부에서 변경하려고합니다.

object value; 
if (dict.TryGetValue("someProperty", out value)) { a.SomeProperty = value; }