C# 覆盖 ToString() 并显示在 textBox 中
C# Override ToString() and display in textBox
我有这个Class:
namespace JimWcfFormTest3
{
[DataContract]
public class GateInfo
{
[DataMember]
public int carid { get; set; }
[DataMember]
public int paid_at_gate { get; set; }
[DataMember]
public int wash_pkg_purch { get; set; }
[DataMember]
public string carte { get; set; }
public override string ToString()
{
return "Car ID: " + carid + "Paid at Gate: " + paid_at_gate + "Wash Package: " + wash_pkg_purch + "Ala Carte: " + carte;
}
}
}
此 WCF 服务调用:
namespace JimWcfFormTest3
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service1 : IService1
{
private List<GateInfo> _gate;
private Service1()
{
_gate = new List<GateInfo>();
}
public void Gate_to_Server(GateInfo gatein)
{
if (gatein != null) _gate.Add(gatein);
}
public List<GateInfo> Server_to_Term()
{
return _gate;
}
}
}
通过此表单上的此按钮调用:
private Service1Client server = new Service1Client();
private void button1_Click(object sender, EventArgs e)
{
int carnum = 2;
int pay = 1;
int wash = 5;
string txt = "TEST";
var data_out = new GateInfo { carid = carnum, paid_at_gate = pay, wash_pkg_purch = wash, carte = txt };
server.Gate_to_Server(data_out);
dataGridView1.DataSource = server.Server_to_Term();
我的 ToString 覆盖是否在正确的位置?如何在表单中正确调用 ToString 覆盖,以便在单击按钮时将其放入文本框?
由于您是通过 Web 服务调用它的,因此类型 GateInfo
正在序列化回客户端应用程序(您的表单应用程序)。如果客户端应用程序没有本机 GateInfo
类型,那么您将使用不包含函数的序列化类型。
要让 ToString
覆盖在客户端工作,您需要将 class 包含在您的表单应用程序中。我通常 "type sharing" 通过将共享数据类型/模型对象放在单独的 class 库中并让服务器和客户端都使用此库将对象类型映射到。
如果您使用此方法,请确保将 WCF 服务属性下的选项勾选为 Reuse types in referenced assemblies
。这将使 WCF 客户端生成器知道正确映射该类型。
我有这个Class:
namespace JimWcfFormTest3
{
[DataContract]
public class GateInfo
{
[DataMember]
public int carid { get; set; }
[DataMember]
public int paid_at_gate { get; set; }
[DataMember]
public int wash_pkg_purch { get; set; }
[DataMember]
public string carte { get; set; }
public override string ToString()
{
return "Car ID: " + carid + "Paid at Gate: " + paid_at_gate + "Wash Package: " + wash_pkg_purch + "Ala Carte: " + carte;
}
}
}
此 WCF 服务调用:
namespace JimWcfFormTest3
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service1 : IService1
{
private List<GateInfo> _gate;
private Service1()
{
_gate = new List<GateInfo>();
}
public void Gate_to_Server(GateInfo gatein)
{
if (gatein != null) _gate.Add(gatein);
}
public List<GateInfo> Server_to_Term()
{
return _gate;
}
}
}
通过此表单上的此按钮调用:
private Service1Client server = new Service1Client();
private void button1_Click(object sender, EventArgs e)
{
int carnum = 2;
int pay = 1;
int wash = 5;
string txt = "TEST";
var data_out = new GateInfo { carid = carnum, paid_at_gate = pay, wash_pkg_purch = wash, carte = txt };
server.Gate_to_Server(data_out);
dataGridView1.DataSource = server.Server_to_Term();
我的 ToString 覆盖是否在正确的位置?如何在表单中正确调用 ToString 覆盖,以便在单击按钮时将其放入文本框?
由于您是通过 Web 服务调用它的,因此类型 GateInfo
正在序列化回客户端应用程序(您的表单应用程序)。如果客户端应用程序没有本机 GateInfo
类型,那么您将使用不包含函数的序列化类型。
要让 ToString
覆盖在客户端工作,您需要将 class 包含在您的表单应用程序中。我通常 "type sharing" 通过将共享数据类型/模型对象放在单独的 class 库中并让服务器和客户端都使用此库将对象类型映射到。
如果您使用此方法,请确保将 WCF 服务属性下的选项勾选为 Reuse types in referenced assemblies
。这将使 WCF 客户端生成器知道正确映射该类型。