gpt4 book ai didi

java - C# 相当于具有多个 Setter 方法的 Java 类

转载 作者:行者123 更新时间:2023-12-01 21:56:57 25 4
gpt4 key购买 nike

我正在尝试编写 Java 类的 C# 版本。如果我们调用类 MyRequest,我们将处理一个名为 _body 的字段,它是一个 JSONObject。这是我的类的简化版本,只有这个字段。

Java:

public class MyRequest {


JSONObject _body = new JSONObject();

/**
* Pass a String formatted json as the request body
* @param json
* @return the request itself
*/
public MyRequest setBody(String json) {
_body = new JSONObject(json);
return this;
}

/**
* Pass a JSONObject formatted json as the request body
* @param json
* @return the request itself
*/
public MyRequest setBody(JSONObject json) {
return setBody(json.toString());
}

/**
* Use an HashMap to build the body
* @param json
* @return the request itself
*/
public MyRequest setBody(HashMap<String, Object> json) {
_body = new JSONObject(json);
return this;
}

/**
* Body getter
* @return the stringified body
*/
public String getBody() {
return _body.toString();
}

@Override
public String toString() {
return new JSONObject()
.put("Resource", _resource)
.put("ID", _id)
.put("Action", _action)
.put("Action ID", _actionId)
.put("Filters", _filters.toString())
.put("Body", _body.toString())
.toString();
}
}

正如我们所见,我们的 _body 字段具有三个不同的 setter,并且该类还重写了 ToString() 方法。我想编写一个与此类等效的 C# 代码,而不调用我的 getter 和 setter 方法 GetBody()SetBody()

C# 中 JSONObject 的等价物是来自 Newtonsoft JSONJObject图书馆。我已将覆盖编写如下(但这不是主要问题):

public override string ToString()
{
return new JObject()
{
{"Body",_body.ToString()}
}.ToString();
}

我希望该类遵循 C# 编码标准。它们通常带有这样的模式:

private int myVar;

public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}

那么我们怎样才能在 C# 中让这个 Java 类具有相同的行为呢?

最佳答案

我通常会拥有一个与您想要通过 getter 公开的类型相同的属性,然后拥有其他 SetBody 方法。所以可能:

private JObject body;

public string Body
{
get { return body.ToString(); }
set { body = JObject.Parse(value); }
}

public void SetBody(JObject body)
{
this.body = body;
}

public void SetBody(IDictionary<string, object> body)
{
...
}

但是:

  • 您可能希望在 SetBody(JObject) 方法中克隆 JObject,否则它的行为会非常奇怪
  • string 属性与底层 JObject 变量一起使用可能会导致成本高昂...评估属性通常预计成本较低.

关于java - C# 相当于具有多个 Setter 方法的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34134054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com