C# 如何重写系统类的单个函数?
我试图重写C# 如何重写系统类的单个函数?,c#,asp.net,C#,Asp.net,我试图重写System.DirectoryServices.AccountManagement中GroupPrincipal类的ToString()函数,而无需创建子类。我觉得我以前做过类似的事情,但似乎不记得是怎么做的 我尝试将此作为一个测试,但它似乎覆盖了整个类 public class GroupPrincipal { public override string ToString() { return base.ToString(); } } 谢
System.DirectoryServices.AccountManagement
中GroupPrincipal
类的ToString()
函数,而无需创建子类。我觉得我以前做过类似的事情,但似乎不记得是怎么做的
我尝试将此作为一个测试,但它似乎覆盖了整个类
public class GroupPrincipal
{
public override string ToString()
{
return base.ToString();
}
}
谢谢如果我理解正确,您希望更改现有类的方法而不继承它。这是不可能的(至少在没有思考的情况下是不可能的)
创建子类是正确的方法。这里您没有指定类的基。因此,它只从默认的
对象
派生
尝试:
当然,从某种意义上说,这确实“覆盖了整个类”。但由于OOP的奇妙之处,子类从基继承其行为,直到您自己开始覆盖成员。这样做几乎没有开销
如果AccountManagement
类具有非默认构造函数,则可能还需要向类中添加相应的构造函数。这些可能会传递给基类型中的对应项。例如,您可能有:
public GroupPrincipal(string name)
: base(name)
{
}
您当前的实现存在哪些问题?如上所述,它覆盖了整个类,基本上创建了一个只有ToString函数的类。主要问题是:您为什么要这样做?那么您没有访问
GroupPrincipal
的源代码吗?他清楚地指出,问题是AccountManagement是一个名称空间而不是一个类。另一方面,我以前也试过。不能在同一类型内“重写”类型的成员。(术语本身意味着你有一个派生类型)你可能混淆了“重载”的概念(但可能不是你所追求的),或者可能是部分方法(),All Type生病只是让一个子类只是认为可能有一种方式,也许那就是C++……很长时间了。
public GroupPrincipal(string name)
: base(name)
{
}