我需要一种方法来为给定的类提供一个动态的get成员和集合。我希望能够像这样编写代码:
ns1.Resource.Field1 = "Hello";
string myField = ns1.Resource.Field1;其中ns1是命名空间,我相信"Resource“是类名,而Field1或任何其他属性都是动态的。那么我该如何声明这样的类呢?
我已经学习了如何从"DynamicObject“继承Resource类,但它迫使我将Resource类实例化为一个对象,这是我不想做的操作。
Edit#1:
我想创建一种使用类的方法,如下所示:
Namespace.Resource.DynamicField = "Value";
string myValue = Namespace.Resource.DynamicField;“资源”不应该被实例化,DynamicField是一个成员,我的类将能够处理对它的get和set调用,所以如果在代码中的某个地方,我编写
Namespace.Resource.DynamicField2 = "Hello";我将有一个地方,在那里我可以重写对资源的静态属性"DynamicField2“的设置调用。但是我不知道高级的类的完整属性列表,所以我需要动态创建属性,并且能够控制get和set,就像通过"Name“传递一样:
public class Resource{
public static getMember(string Name){
console.log(Name); //=> this will output "DynamicField2"
return this.dictionary["Name"];
}
} 然后在代码中的某个地方使用它
string a = Resource.DynamicField2; // a will be value "Hello" 发布于 2018-11-11 19:44:23
看看ExpandoObject:
https://docs.microsoft.com/en-us/dotnet/api/system.dynamic.expandoobject?view=netframework-4.7.2
它应该能满足你的需求。
编辑。
您可以在Resource类中创建静态属性来访问ExpandoObject的单个实例。
例如
public static class Resource
{
public static dynamic Data {get;} = new ExpandoObject();
}然后简单地设置Resource.Data.Field1 =任何东西;等等。
发布于 2018-11-11 19:02:29
我不太明白你的意思。但是如果你想要一个这样的值(不需要创建对象)。您可以将class和var声明为静态,如下所示:
namespace ns1{
public static class Resource {
public static string Field1 = "hello-f1";
public static string Field2 = "hello-f2";
}}之后,您可以通过调用该变量来使用此变量。请注意,Fields变量不是常量,因此您可以在任何地方更改它
https://stackoverflow.com/questions/53247988
复制相似问题