簡體   English   中英

從基訪問屬性或父類

[英]Accessing Properties or a Parent Class from Base

我正在嘗試創建一個與數據庫交互的應用程序。

我用多種語言編程,我喜歡在基於MVC的應用程序中使用模型有多么容易。

所以我的問題是,嘗試復制此功能,我有2個類,如下所示:

基類:

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的構造函數中指定的數據庫表中。

希望這有道理。 :)

這段代碼不是我的工作代碼,它只是我想要實現的目標的非常簡單的表示,因此為了便於閱讀,對字段和屬性(驗證器等)進行了簡化。

我認為,更“真實”的示例實際上有助於更好地理解,但是我認為您應該在基類中創建虛擬(甚至是抽象)方法,以將數據保存在數據庫中:

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;
    }
}

這只是為了說明概念,如果您提供更多信息,將更容易提供真實的答案。

您如何將數據保存在數據庫中? 表格的結構如何?

通常,可以通過在基層使用抽象函數,然后在派生類中使用特定的抽象函數來覆蓋它們來解決此問題。 因此將在基礎中建立一個調用樹,但是需要知道派生類詳細信息的函數將在派生類中實現。

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

    public BaseModel()
    {         
    }

    public abstract void Save();
}

在這種情況下,如果在基類中有一個具體的數據表示形式,則最好創建一個DTO對象,以供您的業務類利用。 這是大多數框架(如實體)的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM