簡體   English   中英

不完全確定如何使用接口進行多重繼承c#

[英]Not exactly sure how to use interfaces for multiple inheritance c#

我目前正在將游戲引擎的語言從c ++更改為c#。 在c ++中,我可以簡單地在我的課程中使用兩個類,這使得事情變得更簡單,但是我發現在c#中這是不可能的。 相反,我必須使用接口。

我環顧四周尋找例子,我知道這里有很多東西; 在我的案例中,我無法弄清楚如何實現它。

請注意,我按照教程生成了這段代碼,因此我對多態性的了解可能是錯誤的。

C ++代碼:

class TileMap : public sf::Drawable, public sf::Transformable
{
    ...
private:

    //this virtual function is simply so we don't have to do window.draw(target, states), we can just do window.draw(instance)
    //this is called polymorphism?
    virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
    {
        // apply the transform
        //this isn't our method, i assume it's something in draw() by default.
        //or this generates the finished quads in one image instead of multiple ones.
        states.transform *= getTransform();

        // apply the tileset texture
        //this puts the texture on to what we're going to draw (which is converted in to a single texture)
        states.texture = &m_tileset;

        // draw the vertex array
        target.draw(m_vertices, states);
    }
}

我的tilemap類包含了Drawable類。 states.transform *= getTransform()意味着我需要使用Transformable類。

但是,我不能在c#中完全像c ++這樣做,繼承這兩個類是行不通的。 我認為這是我需要使用接口的地方。

public interface Transformable{ }
public interface Drawable : Transformable{ }

我想在Drawable類中我會實現虛擬繪圖函數,但是,我實際上並沒有從Transformable實現getTransform函數,所以我不知道如何像這樣訪問它。

有人可以告訴我如何使用我在這里提供的功能使用接口嗎?

謝謝。

接口不能代替繼承。

使用接口你只需“繼承”,嗯...一個界面 也就是說,公共成員(方法,屬性)的一堆簽名 實際上,您無法從界面繼承任何有意義的內容。 當您選擇實現接口時,您將為自己增加一個負擔,即您要實現接口的所有成員。 它可以在設計階段幫助您,但它不會幫助您重用已在另一個類中存在的實現。

事實上, 您可以從C ++中的多個類繼承 ,而另一個事實是您可以在C#中實現多個接口 后者不是獲得前者的C#方式 它們是兩個不同的屬性,都是真的,一個是C ++語言,另一個是C#語言和.NET平台。

X繼承自.NET中的Y可以完成兩個基本上正交的事情:

  1. * * X`中的代碼*可以使用父*對象實例*的`protected`實例成員,或`Y`的靜態`protected`成員,就好像它們是自己的一樣。
  2. “X”類型的對象可以傳遞給任何需要類型為“Y”的實例的代碼。

一個對象只能有一個父對象實例; 因此,對象可能只使用從單個父類接收的受保護實例成員(成員可以在“祖父母”類中聲明,但仍然通過父類接收)。 由於從繼承自動執行上述兩種操作,這意味着類只能從一個繼承。 然而,對象可以允許其自身被替換的類型的數量沒有固有的限制。 接口實現允許將實現接口的任何類型的對象傳遞給任何需要接口類型引用的代碼。

暫無
暫無

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

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