首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ToString方法

ToString方法
EN

Stack Overflow用户
提问于 2011-10-04 06:25:28
回答 4查看 2.6K关注 0票数 2

嗨,我有一个班级形式和类SpecificForm。类SpecificForm继承窗体。特定表单有一个重写ToString方法,用于编写有意义的字符串。但是,当我调用类Form的ToString或object时,会得到以下输出:

FormProxy923a5e0e9d7a46b7baa4dfe2173af18c

你知道为什么我不能得到自定义字符串,即使我正在覆盖它。

任何想法和建议,我们都非常感谢!

代码语言:javascript
复制
    /// <summary>
    /// Override of tostring
    /// </summary>
    public override string ToString()
    {
        if (this.Description == null)
            return this.Form.ToString();

        return this.Description;
    }
EN

回答 4

Stack Overflow用户

发布于 2011-10-04 06:38:23

我不确定我是否理解了这个问题,但是如果我没弄错的话,您可能想知道为什么Form类型的实例的行为不像ExtendedForm类型的实例。

重写只替换“孩子”类型的对象上的方法,而不是“父对象”上的方法。首先,继承不应该是如何工作的,但实际上也不可能,例如,如果你有两个扩展类怎么办;应该使用哪个ToString重写?

下面应该解释它是如何工作的。

代码语言:javascript
复制
 public class ClassBase
 {
      public override string ToString()
      {
           return "base";
      }
 }

 public class ClassA : ClassBase
 {
      public override string ToString()
      {
           return "A";
      }
 } 

 public class ClassB : ClassBase
 {
      public override string ToString()
      {
           return "B";
      }
 } 

 public class ClassC : ClassA
 {
      // No override
 }

这将产生以下结果

代码语言:javascript
复制
 ClassBase baseClass = new ClassBase();
 baseClass.ToString() // Returns "base"

 ClassA aClass = new ClassA();
 aClass.ToString(); // Returns "A"

 ClassB bClass = new ClassB();
 bClass.ToString(); // returns "B"

 ClassC cClass = new ClassC();
 cClass.ToString(); // returns "A" because no override exists

请记住,您拥有哪种类型的推荐人并不重要。假设您有一个对ClassBase的引用,它实际上引用了一个ClassA,那么ClassA覆盖仍然会被调用

代码语言:javascript
复制
  ClassBase baseClass = new ClassA();
  baseClass.ToString(); // Returns "A" because baseClass is actually a ClassA
票数 2
EN

Stack Overflow用户

发布于 2011-10-04 06:41:47

您看不到新方法,因为Form类是而不是a SpecificForm类。继承只向一个方向移动。如果您的基类型也具有子类型的属性,那么当两个子类型都添加同名成员时会发生什么?

票数 1
EN

Stack Overflow用户

发布于 2011-10-04 06:50:29

你不清楚问题是什么,代码示例总是有帮助的,但我将介绍我能想到的两个:

代码语言:javascript
复制
Form form = new Form();
form.ToString(); //returns FormProxy923a5e0e9d7a46b7baa4dfe2173af18c

这是意料之中的,因为这里不涉及SpecificForm。

代码语言:javascript
复制
Form form = new SpecificForm();
form.ToString(); //returns FormProxy923a5e0e9d7a46b7baa4dfe2173af18c

这可能是由于ToString()定义中缺少override关键字造成的,它应该如下所示:

代码语言:javascript
复制
public override string ToString()
{
    //Do stuff
}

如果缺少override,则默认行为是创建一个非虚方法,该方法只影响示例中SpecificForm类型的变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7641370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档