【问题标题】:Overriding a method ToString() c# console application覆盖方法 ToString() c# 控制台应用程序
【发布时间】:2013-02-21 08:18:21
【问题描述】:

我正在开发一个包含不同书籍的通用列表的程序。我遇到的问题是,我的 book 类应该覆盖超类 System.Object 中的方法 ToString() 以便它显示如下字符串:

作者名字,作者姓氏,“书名”,年份。

这是我的书类代码:

 class Book
 {
    public string bookTitle
    {
        get;
        set;
    }

    public string authorFirstName
    {
        get;
        set;
    }

    public string authorLastName
    {
        get;
        set;
    }

    public int publicationYear
    {
        get;
        set;
    }


}

这是我在Main中的代码:

 static void Main(string[] args)
    {

        List<Book> books = new List<Book>();
        books.Add(new Book { authorFirstName = "Dumas", authorLastName = "Alexandre", bookTitle = "The Count Of Monte Cristo", publicationYear = 1844 });
        books.Add(new Book { authorFirstName = "Clark", authorLastName = "Arthur C", bookTitle = "Rendezvous with Rama", publicationYear = 1972 });
        books.Add(new Book { authorFirstName = "Dumas", authorLastName = "Alexandre", bookTitle = "The Three Musketeers", publicationYear = 1844 });
        books.Add(new Book { authorFirstName = "Defoe", authorLastName = "Daniel", bookTitle = "Robinson Cruise", publicationYear = 1719 });
        books.Add(new Book { authorFirstName = "Clark", authorLastName = "Arthur C", bookTitle = "2001: A space Odyssey", publicationYear = 1968 });
    }

所以关于“覆盖超类System.Object 中的方法ToString() 以便它返回具有以下格式的字符串”的任何想法:

作者名字,作者姓氏,“书名”,年份。

【问题讨论】:

  • 代码正在编译,但 StackOverflow 失败。你的属性设置不正确。将它们更改为类似:private string _bookTitle; public string bookTitle { get { return _bookTitle; } set { _bookTitle = value; } }

标签: c# overriding


【解决方案1】:

见下文:

class Book
 {
    public string bookTitle
    {
        get {return bookTitle; }
        set {bookTitle = value; }
    }

    ...

    public override string ToString() {
        return string.Format("{0}, {1}, {2}, {3}", 
                         authorFirstName, authorLastName, bookTitle, 
                         publicationYear);
    }
}

【讨论】:

    【解决方案2】:

    你不能覆盖 system.Object.ToString()

    但是你可以实现你自己的集合

    或者你将Extensionmethod添加到可以在列表中调用的列表“ListToMyStringFormat”

    【讨论】:

    • hmm.. 好吧,那么“覆盖超类 System.Object 中的 ToString() 方法”是什么意思??
    • @user2057693 表示.NET中的每个对象都继承自System.ObjectSystem.Object有一个方法ToString()。如果你想在你的类中重写该方法(在这种情况下,Book),你只需要使用我在答案中使用的语法。
    【解决方案3】:

    这里是如何做到这一点的例子:

    public class User
    {
        public Int32 Id { get; set; }
        public String Name { get; set; }
        public List<Article> Article { get; set; }
    
        public String Surname { get; set; }
    
        public override string ToString()
        {
           return Id.ToString() + Name + Surname;
        }
    }
    

    【讨论】:

      【解决方案4】:

      您需要覆盖Book 类中的字符串,而不是System.Object。将以下函数添加到Book 类中。

      public override string ToString()
      {
          return this.authorFirstName + ", " + this.authorLastName + ", " + this.bookTitle + "," + this.publicationYear.ToString();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-30
        • 2010-12-13
        • 2018-01-10
        • 2018-07-05
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 2022-07-27
        相关资源
        最近更新 更多