【问题标题】:Override Index Return in C# Collection在 C# 集合中覆盖索引返回
【发布时间】:2011-03-19 04:21:49
【问题描述】:

我正在向现有的 .Net 集合添加功能。为了做到这一点,我重写了几个函数。我无法覆盖集合中基本数组返回的返回值。例如,如果我调用 emailMessage.To[i],它不会返回正确的值,但如果我调用 emailMessage.Item(i),它会返回正确的值。下面是我课堂上的代码。我需要重写什么来纠正第一个错误?

namespace EmailService
{
    public class MailAddressCollection : System.Net.Mail.MailAddressCollection
    {
        public MailAddressCollection() : base()
        {
        }

        public void Add(MailAddress Address)
        {
             base.Add(Address);
        }

        public MailAddress Item(int index)
        {
            return (MailAddress)(base.Items[index]);
        }

    }
}

【问题讨论】:

标签: c# overriding


【解决方案1】:
public MailAddress this[int index] 
{
   get { return ((MailAddress)(base.Items[index]); }
}

【讨论】:

  • @Brian:可以用'new'关键字隐藏。
  • 我需要新的关键字。 "public new MailAddress this[int index]"
【解决方案2】:

您有点不走运,因为 MailAddressCollection 没有将索引器设置为虚拟。

您可以使用新关键字:

public new MailAddress this[int index]
{
    get
    {
        return base[index];    
    }           
}

但是,只有当您引用了您的集合类型时,您的索引器才会起作用。如果你使用多态,你的索引器不会被调用。

【讨论】:

    【解决方案3】:

    或者

        public MailAddress this[int index]
        {
            get { return base[index] as MailAddress; }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2011-04-23
      • 1970-01-01
      • 2011-02-19
      • 2010-11-06
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多