我有一个静态类,在其中我有多个公共静态属性。我将这个班级视为我的全球班级。
但是现在我需要将此类视为变量,以便我可以将它传递给另一个类的方法进行处理..
我无法实例化这个类..所以实际上我只能在这个类中分配变量。
我的理解是正确的还是我错过了什么?
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类传递到其中?
示例:extentions.DetailedCompare(Global,Global_bk)?当然这会给我一个错误,因为我不能将类型作为变量传递。
请帮帮我,这让我疯了......
答案 0 :(得分:2)
单身人士模式怎么样?您可以将引用传递给共享接口(下面的exable中的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 :(得分:1)
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对象,您可以编辑该对象并将其传递给您需要的任何内容。
答案 2 :(得分:0)
您可以使用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();
}
答案 3 :(得分:0)
使用&#34;类&#34;获取变量的唯一方法信息正在使用反思。您可以为该类获取Type对象。
namespace Foo {
public class Bar
{
}
}
Type type = Type.GetType("Foo.Bar");
否则,如果你真的在描述一个类&#34;实例&#34;然后使用一个对象并简单地实例化一个。
C#没有为类变量提供其他表示法。