【问题标题】:C# Override ToString() and display in textBoxC# 覆盖 ToString() 并在文本框中显示
【发布时间】:2016-11-28 19:11:23
【问题描述】:

我有这个课程:

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 覆盖,以便在单击按钮时将其放入文本框中?

【问题讨论】:

  • GateInfo.ToString() 不起作用吗?在你的情况下 data_out.ToString()
  • @SamMarion - 问题(如下面的答案所述)是 DataContract 中的方法不会通过网络进行序列化,只有实际数据。因此,除非客户端具有完全相同的类(即共享类型),否则它不会知道 GetString() 实现是什么样的,并且将依赖于框架的实现。

标签: c# wcf overriding tostring


【解决方案1】:

由于您是通过 Web 服务调用它,因此 GateInfo 类型将被序列化回客户端应用程序(您的 Forms 应用程序)。如果客户端应用程序没有原生的GateInfo 类型,那么您将使用不包含函数的序列化类型。

要让ToString 覆盖在客户端工作,您需要将该类包含在您的表单应用程序中。我通常通过将共享数据类型/模型对象放在单独的类库中来实现这种“类型共享”,并让服务器和客户端都使用这个库来将对象类型映射到。

如果您使用此方法,请确保将 WCF 服务属性下的选项勾选为Reuse types in referenced assemblies。这将使 WCF 客户端生成器知道正确映射该类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2011-07-07
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多