我需要一种提供动态get成员并为给定类设置的方法。 我希望能够编写如下代码:
ns1.Resource.Field1 = "Hello";
string myField = ns1.Resource.Field1;
其中ns1是名称空间,我相信“ Resource”是类名,而Field1或任何其他属性是动态的。 那么如何声明这样的类呢?
我已经学习了有关从“ DynamicObject”继承Resource类的知识,但是它迫使我将Resource类实例化为一个对象,这是我不想执行的操作。
编辑#1:
我想创建一种使用此类的方法:
Namespace.Resource.DynamicField = "Value";
string myValue = Namespace.Resource.DynamicField;
不应实例化“资源”,并且DynamicField是我的类将能够处理其get和set调用的成员,因此,如果在代码中的某个地方,我可以编写
Namespace.Resource.DynamicField2 = "Hello";
我将有一个地方可以覆盖对Resource的静态属性“ DynamicField2”的set调用。但是我不知道该类的完整属性列表,因此我需要动态创建属性,并能够像通过“名称”传递它一样来控制get和set,让我们说:
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"
答案 0 :(得分:1)
看看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 =设置为任何值;等
答案 1 :(得分:0)
我不太了解你的意思。但是,如果您想要具有这样的值(不创建对象)。您可以像这样将类和var声明为静态:
namespace ns1{
public static class Resource {
public static string Field1 = "hello-f1";
public static string Field2 = "hello-f2";
}}
之后,您可以通过调用 请注意,Fields变量不是const,因此您可以在任何地方进行更改