2014-10-20 2 views
-1

정적 클래스가 있고 그 안에 정적 정적 특성이 여러 개 있습니다. 이 클래스를 글로벌 클래스로 취급합니다. I 처리를 위해 다른 클래스의 메소드에 전달할 수 있도록C# 정적 클래스를 변수로 처리하는 방법

그러나 지금 그래서 사실상 I에서만 수 ..

난이 클래스를 인스턴스화 할 수있다 .. 가변이 클래스 다뤄야 이 클래스 안에 변수를 할당하십시오.

제 이해가 맞나요? 아니면 뭔가 빠졌습니까? 어쩌면

public static class Global_bk 
{ 
    public const int RobotMax = 2; 

    // GUI sync context 
    public static MainForm mainForm; 
    public static SynchronizationContext UIContext; 

    // Database 
    public static Database DB = null; 
    public static string localDBName = "local.db"; 
    public static Database localDB = null; 
    public static Database ChangeLogDB = null; 
    public static string changeLogDBName = "ChangeLog.db"; 
} 

내가 Global_bk 전역에서 내용을 복사 할 필요가

public static class Global 
{ 
    public const int RobotMax = 2; 

    // GUI sync context 
    public static MainForm mainForm; 
    public static SynchronizationContext UIContext; 

    // Database 
    public static Database DB = null; 
    public static string localDBName = "local.db"; 
    public static Database localDB = null; 
    public static Database ChangeLogDB = null; 
    public static string changeLogDBName = "ChangeLog.db"; 
} 

하자 내가이 같은 클래스가 있다고 가정하고, 어떻게 든 다른 클래스에서 이것의 사본을 보관해야합니다.

그리고 그 후 나는 내가 비교 메소드를 호출하고 내부의 정적 글로벌 클래스를 통과 가야합니까 어떻게 내 기본 폼에 따라서

static class extentions 
{ 
    public static List<Variance> DetailedCompare<T>(T val1, T val2) 
    { 
     List<Variance> variances = new List<Variance>(); 
     FieldInfo[] fi = val1.GetType().GetFields(); 
     foreach (FieldInfo f in fi) 
     { 
      Variance v = new Variance(); 
      v.Prop = f.Name; 
      v.valA = f.GetValue(val1); 
      v.valB = f.GetValue(val2); 
      if (!v.valA.Equals(v.valB)) 
       variances.Add(v); 

     } 
     return variances; 
    } 
} 

class Variance 
{ 
    string _prop; 
    public string Prop 
    { 
     get { return _prop; } 
     set { _prop = value; } 
    } 
    object _valA; 
    public object valA 
    { 
     get { return _valA; } 
     set { _valA = value; } 
    } 
    object _valB; 
    public object valB 
    { 
     get { return _valB; } 
     set { _valB = value; } 
    } 
} 

, 같은 방법으로 두 클래스의 내용을 비교해야 ?

예 : extentions.DetailedCompare (Global, Global_bk)? 물론 이것은 타입을 변수로 전달할 수 없으므로 오류가 발생합니다. 당신은 classname.membername와 멤버에 액세스 할 수 있습니다

답변

0

제발 도와주세요,이 날 운전 너트

....

internal static class SomeClass 
{ 
    public static int SomeProperty {get;set;} 

    public static void SomeMethod() 
    { 
     //do something 
    } 
} 

static void main() 
{ 
    SomeClass.SomeProperty = 15; 
    SomeClass.SomeMethod(); 
} 
+0

물론입니다. 하지만 어떻게 모든 회원/변수 등 클래스 자체에 액세스합니까? – CJC

+0

정적 클래스의 모든 멤버는 정적입니다 ... 액세스하려는 경우이를 공개 또는 내부로 만듭니다. 그런 다음 클래스 이름을 사용하십시오. Member (methods properties ...) –

+0

네, 그 점도 알고 있습니다. 공개입니다. 하지만 클래스 자체를 함수/멤버의 인수로 변수로 전달해야합니다.각각의 변수/멤버/속성/속성을 개별적으로 전달하고 싶지 않습니다. 본질적으로 그 내용을 다른 동일한 클래스에 복사하여 두 클래스를 비교할 수 있습니다. – CJC

2

싱글 톤 패턴은 어떻습니까? 공유 인터페이스에 대한 참조를 전달할 수 있으며 (여전히 아래에있는 IDoable) 인스턴스는 하나뿐입니다.

은 즉 :

public interface IDoable { 
    int Value { get; set; } 
    void Foo(); 
} 

public static class DoableWrapper { 
    private MyDoable : IDoable { 
    public int Value { get;set; } 
    public void Foo() { 
    } 
    } 

    private static IDoable s_Doable = new MyDoable(); 
    public static IDoable Instance { 
    get { return s_Doable; } 
    } 
} 
1

싱글 여기에 갈 수있는 방법입니다. 이처럼 수행 할 수 있습니다하는 GetInstance 방법은 당신에게 당신이 편집하여 원하는 영역에 전달할 수있는 SomeClass 개체를 반환합니다

internal class SomeClass 
{ 
    private static SomeClass singleton; 

    private SomeClass(){} //yes: private constructor 

    public static SomeClass GetInstance() 
    { 
     return singleton ?? new SomeClass(); 
    } 

    public int SomeProperty {get;set;} 

    public void SomeMethod() 
    { 
     //do something 
    } 
} 

.

0

"클래스"정보가있는 변수를 얻는 유일한 방법은 리플렉션을 사용하는 것입니다. 클래스의 Type 객체를 가져올 수 있습니다.

그렇지 않으면 실제로 "클래스"인스턴스를 설명하는 경우 개체를 사용하고 인스턴스를 생성하면됩니다.

C#은 클래스 변수에 대해 다른 표기법을 제공하지 않습니다.

관련 문제