【问题标题】:Public override string more returns公共覆盖字符串更多返回
【发布时间】:2017-05-22 10:10:39
【问题描述】:

学校要求我使用公共覆盖字符串。我想要这样的东西:

lbl_Name.Text = ToString(*Field: Naam from class Gebruikerklasse*)
lbl_Surname.Text = ToString(*Field: Achternaam from class Gebruikersklasse*)

我的班级中有多个字段,但我只想返回其中的几个。我是否需要不同的方法,或者我可以只使用一种方法并使用一些 if 语句和布尔值返回更多?

这就是我现在拥有的:

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace BurnThatFat
    {
        class Gebruikerklasse
        {
            public string Naam;
            public string Achternaam;
            public int Leeftijd;
            public string Geslacht;
            public int Huidiggewicht;
            public int Streefgewicht;
            public string Gebruikersnaam;
            public string Wachtwoord;

            public override string ToString()
            {
                return Naam;

            }
// I want to use the same method again but this time for another field.


 public override string ToString()
        {
            return Gebruikersnaam;
        }

    }

}

【问题讨论】:

  • 不清楚你想做什么
  • 如果你现在读呢? @L.B
  • 很明显,您希望编译器在没有合理指令的情况下弄清楚您想要做什么......但是如果您得到一个,为什么还要写这么多代码呢? :) 您可能想阅读“C# 方法重载”以了解该语言的意义所在。
  • 还要考虑发布确切的作业 - 绝对不清楚您应该做什么。
  • 不要考虑使用属性而不是字段。当您想使用数据绑定时,它会有所作为。你可能想要return String.Format({0}, {1}", Achternaam, Naam);

标签: c# visual-studio class return overriding


【解决方案1】:

我建议实现IFormattable接口:

    class Gebruikerklasse {
      ...

      // "A" - Achternaam
      // "G" - Gebruikersnaam
      // "N" - Naam
      // null, empty - default ToString format  
      public string ToString(string format, IFormatProvider formatProvider) {
        if (string.IsNullOrEmpty(format))
          return ToString(); 
        else if ("N".Equals(format, StringComparison.OrdinalIgnoreCase))
          return Naam;
        else if ("A".Equals(format, StringComparison.OrdinalIgnoreCase))
          return Achternaam;
        else if ("G".Equals(format, StringComparison.OrdinalIgnoreCase))
          return Gebruikersnaam;
        else
          throw new FormatException($"Unknown format '{format}'");
      }

      public string ToString(string format) {
        return ToString(format, CultureInfo.CurrentCulture);
      }

      public override string ToString() {
        return Gebruikersnaam;
      }
    }

所以你可以说:

    Gebruikerklasse instance = new Gebruikerklasse();

    lbl_Name.Text = instance.ToString("G");
    lbl_Surname.Text = instance.ToString("A");

【讨论】:

    【解决方案2】:
    using System;
    
    namespace BurnThatFat
    {
        class Program
        {
            static void Main()
            {
                var g1 = new Gebruikerklasse1() { Naam = "Duncan", Geslacht = "Male", Huidiggewicht = 75, Gebruikersnaam = "DCarr" };
                var g2 = new Gebruikerklasse2() { Naam = "Duncan", Geslacht = "Male", Huidiggewicht = 75, Gebruikersnaam = "DCarr" };
    
                Console.WriteLine(g1);
                Console.WriteLine(g2);
    
                Console.ReadKey();
            }
        }
    
        class Gebruikerklasse1
        {
            public string Naam;
            public string Achternaam;
            public int Leeftijd;
            public string Geslacht;
            public int Huidiggewicht;
            public int Streefgewicht;
            public string Gebruikersnaam;
            public string Wachtwoord;
        }
    
        class Gebruikerklasse2
        {
            public string Naam;
            public string Achternaam;
            public int Leeftijd;
            public string Geslacht;
            public int Huidiggewicht;
            public int Streefgewicht;
            public string Gebruikersnaam;
            public string Wachtwoord;
    
            public override string ToString()
            {
                return string.Format("{0} - {1} - {2} - {3}", Gebruikersnaam, Geslacht, Huidiggewicht, Naam);
            }
        }
    }
    

    输出是:

    BurnThatFat.Gebruikerklasse1
    DCarr - Male - 75 - Duncan
    

    "g1" outputs default class-to-string output
    "g2" outputs overriden format - which can include any members you like
    

    对不起,如果我误解了。

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多