繁体   English   中英

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

[英]C# How to treat static class as a variable

我有一个静态类,并且其中有多个公共静态属性。 我将此课程视为我的全球课程。

但是,现在我需要将此类视为变量,以便可以将其传递给另一个类的方法进行处理。

我无法实例化此类。.因此,实际上我只能在此类内分配变量。

我的理解正确吗?还是我缺少什么?

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

我需要将内容从Global复制到Global_bk。

然后,我需要使用类似的方法比较两个类的内容

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

因此,在我的主窗体上,如何去调用compare方法并在内部传递静态Global类呢?

示例:extensions.DetailedCompare(Global,Global_bk)? 当然,这会给我一个错误,因为我无法将类型作为变量传递。

请帮助我,这让我发疯了...

单例模式怎么样? 您可以将引用传递给共享接口(下面的exable中的IDoable),并且仍然只有一个实例。

IE浏览器:

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

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对象,您可以对其进行编辑并将其传递给所需的任何对象。

您可以使用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();
 }

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

namespace Foo {

public class Bar
{
}

}


Type type = Type.GetType("Foo.Bar");

否则,如果您确实在描述类“实例”,则使用一个对象并简单地实例化一个。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM