C# 关于从DataTable继承的问题

C# 关于从DataTable继承的问题,c#,ado.net,datatable,C#,Ado.net,Datatable,我创建了这个继承DataTable的MyDataTable类 public class MyDataTable : DataTable { public string MyProperty { get; set; } public DataTable MyData { get; set; } public void MyMethod() { //...do some processing on itself MyData = th

我创建了这个继承DataTable的MyDataTable类

public class MyDataTable : DataTable
{
    public string MyProperty { get; set; }
    public DataTable MyData { get; set; }

    public void MyMethod()
    {
        //...do some processing on itself
        MyData = this;
    }
}

为什么要扩展数据表?如果您希望添加方法,则应该查看。我非常确定,没有任何虚拟方法或属性可以覆盖,memeber隐藏在中也不起作用。对于试图扩展DataTable的人的另一个视图

编辑:

如果您还试图通过WCF传递对象,则必须对其进行标记,但这会导致一些其他问题,如果基类具有某种特殊序列化,则可能会被拒绝。在这种情况下,将派生类标记为[Serializable]也会引发错误

我会认真考虑你所说的。这样,您就有了工厂类,它可以按照您每次想要的方式构建表,但它仍然是一个数据表

public class MyDataTable : DataTable
{
    public string MyProperty { get; set; }
    public DataTable MyData { get; set; }

    public void MyMethod()
    {
        //...do some processing on itself
        MyData = this;
    }
}
如果数据表中有任何对象(非原语),则必须将WCF服务标记为“KnownTypes(typeof(MyType))”,以便它知道序列化的数据表中有序列化的内容

最后一个绘图,您应该避免在WCF中使用数据表和数据集


列出错误消息。这应该有用。我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。您的类同时使用继承和组合
MyData=this
有点奇怪。您仍然需要列出错误消息。这应该不会有任何区别(除了不能调用
MyMethod()
)。@HenkHolterman:没错,我更倾向于“不扩展数据表”的方法。编辑答案。我更新了我的问题。实际上,当我将MyDataTable参数传递给接受DataTable参数的wcf服务的方法时,它会失败。我扩展它是因为该表始终有4个特定列。因此,我认为可以扩展DataTable并在initialize方法中创建列,而不是在每个实例上创建这些列。同时也要将所有数据转换方法保持在itself@gangt当前位置我已更改了答案以答复您。WCF需要可序列化对象,因此您必须将新对象标记为可序列化对象,以便其工作(基本数据表就是这样)。然而,如果这就是你想要做的,使用工厂模式。。。