0

我有这个类作为父类:

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 的新手并且仍在尝试学习它。

4

1 回答 1

1

我不确定我是否正确理解了你的问题。(您当前的代码GetStuffResult1不应该编译,因为您已经定义了两次 Id 属性。)如果您希望从中继承,GetStuffResult则可以这样做(请参阅Inheritance):

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 关键字。

如果您对使用部分类感到困惑并且您可能需要多个源文件中的单个类,那么我正在考虑您的问题的第二件事。在这种情况下,您可以使用partial关键字。如果是这种情况并且您不需要继承,那么您需要为该类使用一个名称。例如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或子类中使用不同的名称,以便更清晰。

于 2012-07-25T03:52:35.597 回答