如何继承存储过程调用的部分类

时间:2012-07-24 21:56:51

标签: c#-4.0 inheritance

我把这个班作为父班:

public partial class GetStuffResult
{

    private int _Id;

    private string _Name;

    public GetStuffResult()
    {
    }

    [Column(Storage="_Id", DbType="INT NOT NULL")]
    public int Id
    {
        get
        {
            return this._Id;
        }
        set
        {
            if ((this._Id != value))
            {
                this._Id = value;
            }
        }
    }

    [Column(Storage="_Name", DbType="NVarChar(100)")]
    public string Name
    {
        get
        {
            return this._Name;
        }
        set
        {
            if ((this._Name != value))
            {
                this._Name = value;
            }
        }
    }
}

这是基类,除了额外的方法外,它具有相同的方法:

public partial class GetStuffResult1
{
    private int _Score;

    private int _Id;

    private string _Name;

    public GetStuffResult1()
    {
    }

    [Column(Storage="_Score", DbType="INT NOT NULL")]
    public int Id
    {
        get
        {
            return this._Score;
        }
        set
        {
            if ((this._Score != value))
            {
                this._Score = value;
            }
        }
    }

    [Column(Storage="_Id", DbType="INT NOT NULL")]
    public int Id
    {
        get
        {
            return this._Id;
        }
        set
        {
            if ((this._Id != value))
            {
                this._Id = value;
            }
        }
    }

    [Column(Storage="_Name", DbType="NVarChar(100)")]
    public string Name
    {
        get
        {
            return this._Name;
        }
        set
        {
            if ((this._Name != value))
            {
                this._Name = value;
            }
        }
    }
}

之前我已经完成了继承,但我完全不知道它在这种情况下会如何工作?我如何继承GetStuffResult,以便我可以使用它的2个方法,而不必在GetStuffResult1中复制粘贴相同的代码两次。 如果有人可以提供代码示例,我会很感激,因为我是.net 3.5的新手,并且仍在努力学习它。

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了你的问题。 (您GetStuffResult1的当前代码不应该编译,因为您已经定义了Id属性两次。)如果您希望从GetStuffResult继承,那么这样做(参见{{ 3}}):

public partial class GetStuffResult1 : GetStuffResult
    {
        private int _Score;  

        public GetStuffResult1()
        {
        }

        [Column(Storage = "_Score", DbType = "INT NOT NULL")]
        public int Id
        {
            get
            {
                return this._Score;
            }
            set
            {
                if ((this._Score != value))
                {
                    this._Score = value;
                }
            }
        }


    }

请注意,我已从子类中删除了_Id_Name。但是,这会给你警告:

  

GetStuffResult1.Id'隐藏继承的成员   'ThreadConsoleApp.GetStuffResult.Id'。如果隐藏,请使用new关键字   打算。

如果您对使用部分类感到困惑而且您可能需要在多个源文件中使用单个类,那么我正在考虑您的第二件事。在这种情况下,您可以使用Inheritance关键字。如果是这种情况并且您不需要继承,那么您需要为该类使用单个名称。例如GetStuffResult。在这种特殊情况下,您的GetStuffResult1将成为:

public partial class GetStuffResult
    {
        private int _Score;  

        public GetStuffResult1()
        {
        }

        [Column(Storage = "_Score", DbType = "INT NOT NULL")]
        public int Id
        {
            get
            {
                return this._Score;
            }
            set
            {
                if ((this._Score != value))
                {
                    this._Score = value;
                }
            }
        }


    }

这与具有所有组合属性的单个类类似。

编辑:

要访问子类中的基类属性,可以使用base关键字。

    base.Id = 0;
    base.Name = "SomeName";

要从GetStuffResult1的对象访问基类属性,请参阅以下示例。

    GetStuffResult1 gsr1 = new GetStuffResult1();
    gsr1.Id = 0;
    gsr1.Name = "SomeName";

此处gsr1.Name来自基类,您可以在基类或子类中使用Id的不同名称,以便它可以更清晰。