【问题标题】:How to Override a single function of a system class?如何覆盖系统类的单个函数?
【发布时间】:2014-03-17 17:35:43
【问题描述】:

我正在尝试覆盖System.DirectoryServices.AccountManagementGroupPrincipal 类的ToString() 函数,而不必创建子类。我觉得我以前做过非常相似的事情,但似乎不记得怎么做了。

我试过这个作为测试,但它似乎覆盖了整个类

public class GroupPrincipal
{
    public override string ToString()
    {
        return base.ToString();
    }
}

谢谢

【问题讨论】:

  • 您当前的实施有什么问题?
  • 如前所述,它覆盖了整个类,基本上创建了一个只有 ToString 函数的类
  • 主要问题是:你为什么要做这样的事情?
  • 所以你没有访问GroupPrincipal的来源?

标签: c# asp.net


【解决方案1】:

如果我理解正确,您想更改现有类的方法而不继承它。这是不可能的(至少没有反思)。

创建一个子类是正确的方法。

【讨论】:

  • 好吧,我只是创建一个子类只是想可能有办法,也许那是 c++ ...已经很长时间了。
【解决方案2】:

这里你没有为你的类指定基础。因此,它仅派生自默认值object

试试:

public class GroupPrincipal : AccountManagement
{
    // Method overrides here...
}

当然,从某种意义上说,这确实“覆盖了整个类”。但是由于 OOP 的奇妙之处,子类从基类继承其行为,直到您自己开始覆盖成员。这样做的开销很小。

如果AccountManagement 类具有非默认构造函数,您可能还需要将相应的构造函数添加到您的类中。这些可能会传递给基本类型中的对应物。例如,您可能有:

public GroupPrincipal(string name)
    : base(name)
{
}

【讨论】:

  • 他明确表示,他不想创建子类。
  • 问题是 AccountManagement 是一个命名空间而不是一个类。否则,它就是我以前尝试过的那种。
  • 好的。您不能“覆盖”同一类型内的某个类型的成员。 (这个术语本身意味着你有一个派生类型。)你可能会混淆“重载”的概念(msdn.microsoft.com/en-us/library/vstudio/…,但可能不是你所追求的),或者可能是部分方法(msdn.microsoft.com/en-us/library/wa80x488.aspx)。跨度>
猜你喜欢
  • 2012-03-16
  • 1970-01-01
  • 2015-04-30
  • 2022-01-21
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多