Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何重写系统类的单个函数?_C#_Asp.net - Fatal编程技术网

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)
{
}