簡體   English   中英

如何在C#中的基類和派生類之間划分返回對象的創建邏輯?

[英]How to divide logic of returned object's creating between base and derived class in C#?

如何在沒有冗余方法,復制對象,通過引用傳遞和其他骯臟技巧的情況下,在基類和派生類之間划分對象的創建邏輯? 這是一個例子。 我需要寫更多細節。 我需要寫更多細節。 更多細節。

public abstract class Base
{
    protected int Property1;
    protected int Property2;

    public View GetView()
    {
        View view = new View();
        view.Property1 = Property1.ToString();
        view.Property2 = Property2.ToString();
        return view;
    }
}

public class Derived1 : Base
{
    int Property3;

    public override View GetView()
    {
        View1 view = new View1();
        view.Property3 = Property3.ToString();
        //return view;
        //return base.GetView();
        //return view UNION base.GetView(); ???
    }
}

public class Derived2 : Base
{
    int Property4;

    public override View GetView()
    {
        View2 view = new View2();
        view.Property4 = Property4.ToString();
        //return ???
    }
}

public abstract class View
{
    public string Property1;
    public string Property2;
}

public class View1 : View
{
    public string Property3;
}

public class View2 : View
{
    public string Property4;
}

謝謝。

這是一種可能性。 視圖將傳遞給基本設置方法以設置基本特定字段。

public abstract class Base
{
    protected int Property1;
    protected int Property2;

    protected void Setup(View view)
    {
        view.Property1 = Property1.ToString();
        view.Property2 = Property2.ToString();
    }
}

public class Derived1 : Base
{
    int Property3;

    public View GetView()
    {
        View1 view = new View1();
        view.Property3 = Property3.ToString();
        Setup(view);
        return view;
    }
}

public class Derived2 : Base
{
    int Property4;

    public View GetView()
    {
        View2 view = new View2();
        view.Property4 = Property4.ToString();
        Setup(view);
        return view;
    }
}

我想泛型可以幫助您完全實現您所希望的-強類型結果和重用基類邏輯的能力。 也許我錯過了你的意思

public abstract class Base<T>
    where T : View
{
    protected int Property1;
    protected int Property2;

    public abstract T GetView();
}

public class Derived1 : Base<View1>
{
    int Property3;

    public override View1 GetView()
    {
        View1 view = new View1();
        view.Property3 = Property3.ToString();
        return view;
    }
}

暫無
暫無

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

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