gpt4 book ai didi

c# - 类中的方法可以接收与参数相同的类吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:18 25 4
gpt4 key购买 nike

我有课

public class Position
{
public double X_long { get; set; }
public double Y_lat { get; set; }
}

我有一个单独的函数来将位置发送到我的网络服务。

private void PositionSaveWeb(Position sp)
{
var httpWebRequest = (HttpWebRequest)WebRequest
.Create("http://myserver.com/ApiTest/api/Position");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls;

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = JsonConvert.SerializeObject(sp);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}

string result = TryWebRequest(httpWebRequest);
}

我想知道我是否可以/应该将该方法添加到类中,还是像现在这样:

public class Position
{
public double X_long { get; set; }
public double Y_lat { get; set; }

public void Save (Position sp) {
}
}

我这里遇到的问题是:

  • 在 javascript 中,当您声明一个类时,您有 this。所以我可以调用 JsonConvert.SerializeObject(this); 但我不知道如何序列化该对象。除非我使用公共(public)变量在方法内创建一个新的位置对象。但是使用您正在创建的东西来创建某些东西感觉很奇怪。我不想创建不定式递归循环或其他东西。
  • 现在这个类也包含了一个方法,这个方法是否也被序列化。

那么 Save 应该是类的一个方法吗?如果是,我该如何添加它?

最佳答案

直接回答题主的问题,一个类可以有一个带参数的方法,如果它自己的类型,这很正常。

public class Values
{
public int X { get; set; }
public int Y { get; set; }

public void Add(Values other)
{
X += other.X;
Y += other.Y;
}
}

方法不会被序列化,因此无论是否使用该方法,类都会被序列化。


我绝对不会在您的Position 类中放置PositionSaveWeb 方法。 Position 类的目的是表示一个位置。您可以使用该类做一百万件事 - 序列化它、将其发布到 HttpRequest 中、通过电子邮件发送它等等。但这些事情不是该类的责任。

这就是所谓的单一职责原则。一个类只有一个目的,只有一个改变的理由。因此,如果您确定 Position 具有三个点,您可能会更改该类。但是您不想更改该类,因为现在您想通过某种不同的方法发送它。

所以在这种情况下,我建议 PositionSaveWeb 应该是它自己的类。

关于c# - 类中的方法可以接收与参数相同的类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234600/

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