C#如何将静态类视为变量

C#如何将静态类视为变量,c#,class,variables,static,public,C#,Class,Variables,Static,Public,我有一个静态类,其中有多个公共静态属性。我把这个班当作我的全球班 但是现在我需要把这个类当作一个变量,这样我就可以把它传递给另一个类的方法进行处理 我无法实例化这个类。。所以实际上我只能分配这个类中的变量 我的理解是正确的还是遗漏了什么 public static class Global { public const int RobotMax = 2; // GUI sync context public static MainForm mainForm; p

我有一个静态类,其中有多个公共静态属性。我把这个班当作我的全球班

但是现在我需要把这个类当作一个变量,这样我就可以把它传递给另一个类的方法进行处理

我无法实例化这个类。。所以实际上我只能分配这个类中的变量

我的理解是正确的还是遗漏了什么

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";
 }
比如说我有一个这样的班级,我需要在另一个班级里保存一份副本

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";
 }
我需要将内容从全局复制到全局

然后,我需要用一个方法比较这两个类的内容,比如

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; }
    }
}
静态类扩展
{
公共静态列表DetailedCompare(T val1,T val2)
{
列表差异=新列表();
FieldInfo[]fi=val1.GetType().GetFields();
foreach(fi中的字段信息f)
{
方差v=新方差();
v、 Prop=f.名称;
v、 valA=f.GetValue(val1);
v、 valB=f.GetValue(val2);
如果(!v.valA.等于(v.valB))
差异。添加(v);
}
回报差异;
}
}
阶级差异
{
弦道具;
公共字符串道具
{
获取{return\u prop;}
设置{u prop=value;}
}
对象_valA;
公共对象valA
{
获取{return_valA;}
设置{u valA=value;}
}
对象_valB;
公共对象valB
{
获取{return_valB;}
设置{u valB=value;}
}
}
那么,在我的主窗体上,如何调用compare方法并在其中传递静态全局类呢

示例:extensions.DetailedCompare(全局、全局)?当然,这会给我一个错误,因为我不能将类型作为变量传递


请帮帮我,这快把我逼疯了

您可以使用classname.membername访问成员

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

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

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

您可以使用classname.membername访问成员

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

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

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

单身模式怎么样?您可以传递对共享接口的引用(下面的示例中为IDoable),但仍然只有一个实例

即:


单身模式怎么样?您可以传递对共享接口的引用(下面的示例中为IDoable),但仍然只有一个实例

即:


单身是这里的出路。您可以这样做:

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
    }
 }

GetInstance方法将返回一个SomeClass对象,您可以编辑该对象并将其传递到所需的任何对象中。

Singleton就是其中的一种方法。您可以这样做:

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
    }
 }

GetInstance方法将返回一个SomeClass对象,您可以编辑该对象并将其传递到所需的任何对象中。

获取带有“类”信息的变量的唯一方法是使用反射。可以为类获取类型对象

namespace Foo {

public class Bar
{
}

}


Type type = Type.GetType("Foo.Bar");
否则,如果您真的在描述一个类“实例”,那么就使用一个对象并简单地实例化一个


C#没有为类变量提供其他符号。

获取包含“类”信息的变量的唯一方法是使用反射。可以为类获取类型对象

namespace Foo {

public class Bar
{
}

}


Type type = Type.GetType("Foo.Bar");
否则,如果您真的在描述一个类“实例”,那么就使用一个对象并简单地实例化一个


C#没有为类变量提供其他符号。

当然正确。但是我如何访问类本身,作为所有成员/变量等?静态类的所有成员都是静态的。。。如果您想访问它们,请将其公开或内部。然后使用类名。成员(方法属性…)是的,我也理解。这是公开的。但我需要将类本身作为变量传递到函数/成员的参数中。我不想单独传递每个变量/成员/属性/属性。我基本上想把它的内容复制到另一个相同的类中,这样我就可以比较这两个类了。没有静态类的对象。但是在普通类中仍然可以有静态成员。当然可以。但是我如何访问类本身,作为所有成员/变量等?静态类的所有成员都是静态的。。。如果您想访问它们,请将其公开或内部。然后使用类名。成员(方法属性…)是的,我也理解。这是公开的。但我需要将类本身作为变量传递到函数/成员的参数中。我不想单独传递每个变量/成员/属性/属性。我基本上想把它的内容复制到另一个相同的类中,这样我就可以比较这两个类了。没有静态类的对象。但是你仍然可以在普通类中使用静态成员。下次一定要尽可能减少你的问题和例子,以显示问题。你有7个静态字段来转移你真正想问的问题的焦点。也就是说,你的问题写得很好。下次一定要尽可能减少你的问题和例子,以展示问题。你有7个静态字段来转移你真正想问的问题的焦点。也就是说,你的问题写得很好。