-1

我有一个抽象的 C# 类,它通过许多类继承,我想在泛型类中添加一个静态函数。

public abstract class A<T>: where T
{
    protected A()
    {
        // setup class A
    }

    public List<T> GetResult()
    {
        return new List<String>();
    }
}

public class B : A<String>
{
    public string FooBar()
    {
        // do something
    }
}

现在,我想在抽象类 A 中添加一个静态类

pulic static List<T> GetResults()
{
    var foo = new A();
    return foo.GetResult();
}

现在,我想通过继承的类调用新的静态函数

B.GetResults();

抽象类可以实现这样的事情吗?

4

2 回答 2

3

您的问题不清楚,因为您提供的代码在很多方面都无效。但是,您可以在抽象泛型基类中创建静态方法,并且可以“通过”派生类型的名称来调用它……但这样做并不是特别有用。

所以这段代码有效:

using System;

public abstract class A<T> where T : new()
{
    public static T CreateInstance()
    {
        return new T();
    }
}

public class B : A<int>
{
}

class Test
{
    static void Main()
    {
        Console.WriteLine(B.CreateInstance());
    }
}

...但调用B.CreateInstance()完全等同于:

A<int>.CreateInstance();

...确实,这就是它的编译目标。

一般来说,我强烈建议不要通过派生类访问静态成员。如此相似,ASCIIEncoding.ASCII我建议不要写作,而是写作Encoding.ASCII- 你在使用什么更清楚。

现在这是否真的解决了你的问题是另一回事 - 目前还不清楚,因为你没有真正解释你想要实现的目标,只是你试图实现它的方式。

于 2012-11-20T12:44:10.960 回答
1

你可以试试这个:

public abstract class A<T, TSelf> // TSelf name just to clarify here
    where TSelf : A<T, TSelf>, new()
{
    public abstract List<T> GetResult();

    public static List<T> GetResults()
    {
        var foo = new TSelf();
        return foo.GetResult();
    }
}

public class B : A<String, B>
{
    public override List<String> GetResult()
    {
        // Do something....
    }
}

现在您可以致电:

List<String> results = B.GetResults();
于 2012-11-20T12:46:57.640 回答