从Base访问属性或父类

时间:2012-12-18 14:35:25

标签: c#

我正在尝试创建一个与数据库交互的应用程序。

我用多种语言编程,我喜欢在基于MVC的应用程序中使用模型是多么容易。

所以我的问题是,尝试复制这个功能,我有两个类如下:

基类:

public class BaseModel
{
    protected string TableName { get; set; }

    public BaseModel()
    {         
    }

    public void Save()
    {
        // Save data in derived class to table stored in TableName
    }
}

派生类:

public class UserModel : BaseModel
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }

    public UserModel()
    {
        base.TableName = "user";
    }
}

从我的主要应用程序中,我希望能够执行以下操作:

public class Class1
{
    public Class1()
    {
        UserModel model = new UserModel();
        model.Field1 = "Value1";
        model.Field2 = "Value2";
        model.Save();
    }
}

这是我遇到问题的地方。我不能为我的生活弄清楚,我将如何能够访问UserModel中的属性,以便将它们保存到UserModel的构造函数中指定的数据库表中的BaseModel。

希望这是有道理的。 :)

这段代码不是我的工作代码,它是我想要实现的非常简单的表示,因此字段和属性(验证器等)已经变得简单,以便于阅读。

2 个答案:

答案 0 :(得分:1)

我认为更“真实”的例子实际上有助于更好地理解,但我认为你应该在基类中创建一个虚拟(甚至抽象)方法来获取数据保存在数据库中:

public class BaseModel {

    protected virtual string GetDataToSaveInDB() {
        // if it makes sense to have the data as a string...
    }

    public void Save() {
        string data = GetDataToSaveInDB();
        // do something with data...
    }
}

然后返回派生类中的数据:

public class UserModel : BaseModel {
    protected override string GetDataToSaveInDB() {
        return "Field1=" + Field1 + ";Field2=" + Field2;
    }
}

这只是为了说明这个概念,如果你提供更多信息,就会更容易提供真实的答案。

如何在数据库中保存数据?表结构如何?

答案 1 :(得分:0)

这通常通过在基类级利用抽象函数然后用派生类中的细节覆盖它们来解决。那么会在基础中设置一个调用树,但是需要知道派生类细节的函数将在派生类中实现。

public class BaseModel
{
    protected string TableName { get; set; }

    public BaseModel()
    {         
    }

    public abstract void Save();
}

在这种情况下,您在基类中有一个具体的数据表示形式,最好创建一个业务类在利用中使用的DTO对象。这是大多数框架的实际应用。