static void Main(string[] args)
{
string str = "abc";
str += "xyz";
Console.WriteLine(str);
}
這裏是+ =一種多態性?這是面向對象編程中的一種多態嗎?
static void Main(string[] args)
{
string str = "abc";
str += "xyz";
Console.WriteLine(str);
}
這裏是+ =一種多態性?這是面向對象編程中的一種多態嗎?
這是運算符重載,而不是多態,在這種情況下,它是字符串連接。 您可以在此位置找到更多關於操作員超載的信息:MSDN Link to Operator Overloading
'+ ='操作符不能被重載。 '+ ='求值爲'+',可以重載,但是**如果字符串不重載**。它只是編譯器,它將調用轉換爲'string.Concat' – Habib
那麼爲什麼*不會重載[Ad hoc Polymorphism](http://en.wikipedia.org/wiki/Ad_hoc_polymorphism)的支持性演示? – user2864740
不,它不是多態性其string concatenation
Polymorphism (C# Programming Guide)(基於基派生類)
多態性通常稱爲 面向對象編程的第三支柱,封裝和繼承後。 多態性是希臘詞,意思是「多形」,它有兩個 不同的方面:
- 在運行時,派生類的對象可以在場所,如方法被視爲基類的對象參數和集合或 數組。發生這種情況時,該對象的聲明類型不再是與其運行時類型相同的 。
- 基類可以定義和實現虛擬方法,派生類可以覆蓋它們,這意味着它們提供了自己的定義和實現。在運行時,當客戶端代碼調用 方法時,CLR將查找對象的運行時類型,並調用 來覆蓋虛擬方法。因此,在源代碼中,您可以調用基類上的方法,並使該方法的派生類版本 執行。
編輯,有在這個MSDN article提到的不同類型的多態性。
接口多態性 - 多個類可以實現相同的接口,以及一個類可以實現一個或多個接口。 接口基本上定義了一個類如何響應 。一個接口描述了一個類需要實現的方法,屬性和事件 以及每個成員需要接收和返回的參數類型,但是將這些成員的具體執行情況保留到實現類。
繼承多態性 - 多個類可以從單個基類繼承。通過繼承,一個類在與基類 相同的實現中接收基類的所有方法, 屬性和事件。然後可以根據需要實現其他成員, ,並且可以覆蓋基本成員以提供不同的實現 實現。請注意,繼承類也可能實現接口 - 這些技術並不相互排斥。
通過抽象類的多態性 - 抽象類提供了繼承和接口的元素。一個抽象類是一個 類,它不能被實例化;它必須被繼承。一些 或該類的所有成員可能未實現,並且最多可以使用繼承類來提供該實現。實現的成員 可能仍會被覆蓋,並且繼承類 仍可實現添加接口或其他功能。
我真的不想upvote這個..但是..我無法抗拒。大聲笑.. –
你應該把報價放在blockquotes中,因爲它是從msdn鏈接中未修改的。 – iamnotmaynard
我已經添加MSDN的參考,它不夠? – Adil
a += b
自然意味着a = a + b
。在字符串的情況下,+
運算符將第二個字符串連接到第一個字符串上。它不是一個重載函數(我懷疑是你的意思),而是一個重載運算符,它根據定義是一種特定類型的多態性。所以簡單的答案是肯定的,但也許不像你想象的那樣。
「在面向對象的編程中,運算符重載 - 通常稱爲運算符ad hoc多態 - 是多態的一個特例」 - http://en.wikipedia.org/wiki/Operator_overloading –
啊,好吧,夠公平的。它是多態性。 –
謝謝Matt,那就是我要找的 – kedarK
我不認爲您瞭解面向對象的概念。 –
@RUJordan該操作不是在談論「OOP」。他正在談論*「哎呀!」*,就像在*「哎呀!我又做了一次......」* –