C#泛型 - 模仿C++模板专业化

Dav*_*ten 1 c# generics

我在C++ Tenmplates上找到了一个很好的链接:

http://www.cplusplus.com/doc/tutorial/templates/

并且在C#中需要类似的东西.我有一个似乎有效的解决方案,但希望其他人知道如何与上述链接相关,特别是专业化部分.

这是我提出的概念证明:

public abstract class Piece
{
    public object Value { get; set; }
}

public class Rook : Piece
{
    public void Capture()
    {
        int i = (int)this.Value;
    }
}

public class Pawn : Piece
{
    public void CaptureEnPassant()
    {
        string s = (string)this.Value;
    }
}

public class PieceFactory<P, T> where P : Piece, new()
{

    P p;

    public PieceFactory(T value)
    {
        p = new P();
        p.Value = value;
    }

    public P GetPiece()
    {
        return p;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后最后打电话到工厂我这样做:

var piece = new PieceFactory<Pawn, string>("exd6").GetPiece();

piece.CaptureEnPassant();
Run Code Online (Sandbox Code Playgroud)

我见过不同的解决方案,比如使用扩展方法和其他方法......

只是想看看我的思维方式是否符合良好的模式.

非常感谢,

大卫

Eri*_*ert 8

我的观点是你的草图比必要的要复杂得多,令人困惑.为什么基类具有在每个派生类中具有不同含义和不同类型的"值"?为什么有一个工厂接受一个必须是特定类型参数的类型参数,如果不是,那么程序在运行时崩溃?摆脱所有脆弱,混乱,脆弱的东西.如果一个pawn需要一个字符串,那么在Pawn上创建一个带有字符串的公共构造函数,故事结束.这里根本不需要工厂模式.

不要那么喜欢你用它构建东西的工具,这实际上没有任何意义.通用类型非常适合集合类之类的东西.它们不适合国际象棋领域.