首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提供DynamicObject属性

提供DynamicObject属性
EN

Stack Overflow用户
提问于 2018-11-11 18:50:08
回答 2查看 64关注 0票数 0

我需要一种方法来为给定的类提供一个动态的get成员和集合。我希望能够像这样编写代码:

代码语言:javascript
复制
ns1.Resource.Field1 = "Hello";
string myField = ns1.Resource.Field1;

其中ns1是命名空间,我相信"Resource“是类名,而Field1或任何其他属性都是动态的。那么我该如何声明这样的类呢?

我已经学习了如何从"DynamicObject“继承Resource类,但它迫使我将Resource类实例化为一个对象,这是我不想做的操作。

Edit#1:

我想创建一种使用类的方法,如下所示:

代码语言:javascript
复制
Namespace.Resource.DynamicField = "Value";
string myValue = Namespace.Resource.DynamicField;

“资源”不应该被实例化,DynamicField是一个成员,我的类将能够处理对它的get和set调用,所以如果在代码中的某个地方,我编写

代码语言:javascript
复制
Namespace.Resource.DynamicField2 = "Hello";

我将有一个地方,在那里我可以重写对资源的静态属性"DynamicField2“的设置调用。但是我不知道高级的类的完整属性列表,所以我需要动态创建属性,并且能够控制get和set,就像通过"Name“传递一样:

代码语言:javascript
复制
public class Resource{

   public static getMember(string Name){
       console.log(Name); //=> this will output "DynamicField2"
       return this.dictionary["Name"];
   }
}  

然后在代码中的某个地方使用它

代码语言:javascript
复制
string a = Resource.DynamicField2; // a will be value "Hello" 
EN

回答 2

Stack Overflow用户

发布于 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的单个实例。

例如

代码语言:javascript
复制
public static class Resource
{
     public static dynamic Data {get;} = new ExpandoObject();
}

然后简单地设置Resource.Data.Field1 =任何东西;等等。

票数 1
EN

Stack Overflow用户

发布于 2018-11-11 19:02:29

我不太明白你的意思。但是如果你想要一个这样的值(不需要创建对象)。您可以将class和var声明为静态,如下所示:

代码语言:javascript
复制
namespace ns1{

public static class Resource {

    public static string Field1 = "hello-f1";
    public static string Field2 = "hello-f2";
}}

之后,您可以通过调用该变量来使用此变量。请注意,Fields变量不是常量,因此您可以在任何地方更改它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53247988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档