[英]Accessing variables in a class from another class
我有很多類,稱它們為Class1
, Class2
,...,依此類推。 這些類每個都有兩個變量,分別為TestDictionary
和TestListDictionary
,如下所示。 這些類中的每個類還從另一個類OtherClass
調用方法DoWork()
,並傳入包含類名稱的字符串( "Class1", "Class2", ...
)。
public class Class1
{
public static Dictionary<string, string> TestDictionary = ...
public static ListDictionary TestListDictionary
...
OtherClass.DoWork(GetType().Name);
}
我希望函數DoWork
能夠訪問兩個變量TestDictionary
和TestListDictionary
。 我想做以下事情:
DoWork(string className)
{
var newClass = Activator.CreateInstance(Type.GetType(className));
var newDictionary = newClass.TestDictionary;
var newListDictionary = newClass.TestListDictionary;
...
}
但是我無法訪問TestDictionary
和TestListDictionary
(錯誤“無法解析符號'TestDictionary'/'TestListDictionary')。
假設由於各種原因,我無法將這兩個變量直接傳遞給DoWork
函數。 我將如何訪問它們?
編輯:我嘗試刪除static
關鍵字,但仍然遇到相同的錯誤。
您正在嘗試使用class object
訪問靜態成員。 您可以使用class而不是其實例訪問靜態成員。 獲取類的類型,而不創建該類型的實例。
編輯
您可以使用GetField
和GetValue
來獲取靜態字段,即TestDictionary
,請注意,您必須提供( 程序集限定名稱 ),其中包括在Type.GetType
傳遞的類名稱的名稱空間。
var newType = Type.GetType(className);
var newDictionary = newType.TestDictionary;
var newDictionary = (Dictionary<string, string>)newType.GetField("TestDictionary").GetValue(null);
//newDictionary.Add("1","hello");
//Console.WriteLine(Class1.TestDictionary["1"]);
不使用Reflection
最簡單方法是創建一個包含要訪問的集合的Dictionary
。 類名用作鍵。
public static class Globals
{
public static readonly Dictionary<string, Dictionary<string, string>> Dictionaries
= new Dictionary<string, Dictionary<string, string>>();
public static readonly Dictionary<string, ListDictionary> ListDictionaries
= new Dictionary<string, ListDictionary>();
}
現在, Class1
可以添加自己的字典,如下所示:
Globals.Dictionaries.Add("Class1", TestDictionary);
Globals.ListDictionaries.Add("Class1", TestListDictionary);
另一個類可以通過以下方式訪問它們:
Globals.Dictionaries[classname].Add(key, value);
int count = Globals.ListDictionaries[classname].Count;
在Class1
,定義為靜態的變量:
public static Dictionary<string, string> TestDictionary = new Dictionary<string,string>();
public static string test = "hey!";
可以從另一個類訪問:
var newDictionary = Class1.TestDictionary;
string test = Class1.test;
嘗試繼承這樣的類
public abstract class abstractA
{
public abstract string TestDictionary { get; set; }
public abstract string TestListDictionary { get; set; }
// public abstract string returnDictionary();
public void DoWork()
{
Console.WriteLine(this.TestDictionary);
// do anything with the properties
}
}
public class classA : abstractA
{
public override string TestDictionary { get; set; }
public override string TestListDictionary { get; set; }
public classA(string a, string b )
{
this.TestDictionary = a;
this.TestDictionary = b;
}
}
我使用了字符串來簡化它。 您可以使用字典或任何想要的對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.