第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嵌套的類和接口

嵌套的類和接口

C#
qq_笑_17 2021-03-30 09:14:55
所以我在設(shè)計某些東西時遇到了問題。本質(zhì)上,我有一個類A,它由類型為B的對象的數(shù)組組成。我只希望公開類A的接口,并希望對任何用戶基本上都隱藏類B。我希望能夠?qū)︻愋虰及其數(shù)據(jù)執(zhí)行操作,但只能通過類A的B實例的接口/方法調(diào)用方法來進行操作。棘手的部分是我想創(chuàng)建一個對成員執(zhí)行操作的方法類型B,但我想實現(xiàn)一個接口,然后有一個實現(xiàn)該接口的類,因為我希望我的用戶能夠創(chuàng)建自己的此方法的實現(xiàn)。我當時想像這樣做somtehing:public class A {    B[] arr;    C c;    public A(C c)     {         arr = new B[100];        this.c = c;    }    public void method1()     {        var b = new B();        b.someMethodofb(c);    // pass c to the method of b    }    private class B     {        someMethodOfb(C c)         {        }    }}public class C : Interface1 {    public void method(B b)     {            //interface method we have implemented    }}我將B類設(shè)為私有,是因為我只希望A類可以公開使用,所以發(fā)生在B類上的所有事情都會通過A類發(fā)生,這也是為什么我將B嵌套在A中的原因。但是由于B類是私有的,我可以用它作為我的C類方法的參數(shù)?實現(xiàn)Interface1的方法將影響B(tài)如何執(zhí)行someMethodOfb的內(nèi)部實現(xiàn),這就是為什么我認為我需要傳遞它以保持類B的隱藏特性的原因。請問有沒有更好的方法讓我設(shè)計此功能并能夠?qū)崿F(xiàn)我在第一段中設(shè)定的目標?
查看完整描述

2 回答

?
30秒到達戰(zhàn)場

TA貢獻1828條經(jīng)驗 獲得超6個贊

讓我們用具體的例子:)


說,我們有三個類:Customer,Order和OrderProcessor??蛻艉陀唵问欠謩e代表客戶和訂單的實體,而OrderProcessor將處理訂單:


public interface IOrderProcessor

{

    void ProcessOrder(IOrder order);

}


public interface IOrder

{

    void FinalizeSelf(IOrderProcessor oProc);

    int CustomerId {get; set;}

}


public class Customer

{

    List<IOrder> _orders;

    IOrderProcessor _oProc;

    int _id;


    public Customer(IOrderProcessor oProc, int CustId)

    {

        _oProc = oProc;

        _orders = new List<IOrder>();

        _id = CustId;

    }


    public void CreateNewOrder()

    {

        IOrder _order = new Order() { CustomerId = _id };

        _order.FinalizeSelf(_oProc);

        _orders.Add(_order);

    }


    private class Order : IOrder

    {

        public int CustomerId {get; set;}

        public void FinalizeSelf(IOrderProcessor oProcessor)

        {

            oProcessor.ProcessOrder(this);

        }

    }

}

public class ConcreteProcessor : IOrderProcessor

{

    public void ProcessOrder(IOrder order)

    {

        //Do something

    }

}


查看完整回答
反對 回復(fù) 2021-04-24
  • 2 回答
  • 0 關(guān)注
  • 165 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號