主頁 > .NET開發 > c#多型

c#多型

2020-09-25 02:45:51 .NET開發

今天學習到c#的抽象類 感覺有點懵 有大神能用通俗易懂的語言解答下嗎    

uj5u.com熱心網友回復:

多型 簡單來說 就是  OOP的多種形態


比如說 猴子,有十幾個種類,狐猴、懶猴、嬰猴、指猴、跗猴等


為了把這些猴子的共同形態抽象出來,做成一個介面,讓其它各自有自己特征的猴子繼承


這種模式就稱之為多型

uj5u.com熱心網友回復:

參考 1 樓 tangyanzhi1111的回復:
多型 簡單來說 就是  OOP的多種形態


比如說 猴子,有十幾個種類,狐猴、懶猴、嬰猴、指猴、跗猴等


為了把這些猴子的共同形態抽象出來,做成一個介面,讓其它各自有自己特征的猴子繼承


這種模式就稱之為多型

介面我還沒學到  剛學到多型  花費了一天時間來理解 感覺似懂非懂

uj5u.com熱心網友回復:

接著樓上的說吧,
猴子都要吃東西,
所以 在猴子類里面 加一個 吃東西的方法
不同的猴子 繼承了 猴子類 重寫吃東西的方法
比如說  狐猴  吃 桃    嬰猴 吃 香蕉  懶猴 沒吃到

然后你宣告的時候這樣 
猴子  猴1 = new 狐猴()
猴子  猴2 = new 嬰猴()
猴子  猴3 = new 懶猴()

猴1 猴2 猴3  都是猴子類 ,
但是 你呼叫
猴1.吃東西()
猴2.吃東西()
猴3.吃東西()
是不同的  
這就是多型~

uj5u.com熱心網友回復:

剛接觸 很多概念上的東西 不理解沒關系,不耽誤寫程式,多寫寫,自然就懂了 實踐是最好的老師

uj5u.com熱心網友回復:

多型是面向物件的三大特性之一。
簡單說就是同一個父類,不同子類,子類繼承父類后,重寫父類中的方法,用的時候,父類作為型別,實體化具體子類,呼叫重寫方法時,表現出不一樣的反應,這就是多型。

uj5u.com熱心網友回復:

怎么又來一個

抽象就是抽象的中文含義

人說“你長的很抽象”這句話你怎么理解。
你腦袋里想到什么了?反正很抽象,不好看對吧
至于怎么樣的不好看?反正很多種可能,長啥樣都可能,就是不好看(對了把,不好看是你抽象的共性,長啥樣都可能就是多型)

這玩意別糾結代碼,本來就是現實如此,代碼如此。
現實里有,代碼里就有。上有政策,下有對策,偷梁換柱,李代桃僵現實里有吧,所以代碼里有overide。(舊瓶裝新酒,瓶是你的瓶,酒是我的酒,反正酒換了,柱子換了)
現實里“你指鹿為馬,你官大,你說滴對,但我就干我的”,代碼里就有new,到我的就用我的馬,如果轉到你那里,“對,你說的對。這絕對是鹿,肯定不是馬”

uj5u.com熱心網友回復:

有本書叫“我不是教你耍詐”

我現在也不是教你耍詐。

只是物件化編程本身出現的原因就是因為,程式修修改改太多,專案推倒重建太多

人們總結了一下,怎么來避免。于是就產生我上面說的東西。

你想如果寫程式的是上面那些“狡猾狡猾滴”人寫的,這專案是不是更容易成功

uj5u.com熱心網友回復:

物件化的最初設計想法就是“我們怎么才能做一個能應對各種可能的模型,讓他不那么容易被推倒重建”

所以這是初心,你可以忘記代碼,可以忘記設計模式,但這個初心絕不能忘

忘的這個初心,就很容易被技術,技巧給迷惑。
記住這個初心,你就能理解你書上說的那些東西。那些東西一切的原則都是,他不能垮,我的抽象能盡可能滿足后面的變化。

我們不是神,做不到我說要怎么樣就怎么樣,但是我們起碼要保證在我能力的范圍內,這專案能快速應對各種要求

uj5u.com熱心網友回復:

C#是一種編程語言,也是一種商品。在C#問世的時候,微軟考慮的問題是,拿出一種有競爭力的設計,給程式員們一個使用C#而不是別的編程語言已經很好的理由。微軟從來也不是一個學識訓構,蓋茨骨子里就是一個商人。
因此,任何C#編程語言的特性,包括抽象類的存在,不是為了存在而存在,也不是為了讓學生無法通過考試而存在,而是有實際功能的。
所以你的思維必須改變,你應該去理解的是編程語言中語法特征的使用的動機,而不是追求通俗易懂的比喻。因為即便那些比喻通俗易懂,但是還是沒有解釋一個關鍵的問題,就是為什么C#需要這么一個語法特性。

你要明白的是,只要學習一種語言的基本的幾個語法特性,就可以開始撰寫程式了。而只有你開始撰寫程式了,你才會自己去體會到別的語法特性的方便之處在哪里。

好比學駕駛,我從來沒有看到一上來學習汽車上的座椅怎么加熱,或者播放器怎么操作的。

uj5u.com熱心網友回復:

你還在學習,所以對于你們來說,這一切難于理解。如果悟性好能理解那還好,悟性不好,只能等你作業了,讓你的產品經理來調教你
(注意:不是技術經理調教你,是產品經理調教你,產品經理各種天馬行空,稀奇古怪的玩法,絕對不止我說那些指鹿為馬,偷梁換柱的搞法,還有更多匪夷所思的玩法。至于你的技術經理通常的要求是“你別總跟產品經理說這個不能做。那個不能搞,你們這樣我開會很難辦啊,人家的問題人家不提,開會的炮火全體炮轟技術,說你們技術不管提啥都是,不會,不行,不能”)


PS:物件化其實是不適合初學者學的東西,他來源于實踐。參考于哲學,方法論,策略論,工程論。初學者其實學python跟容易,所以你看哪怕是學數學的玩python都好辦,你讓一個學數學的過來玩玩物件化估計一年半載都難領會這種“狡詐”的思路

uj5u.com熱心網友回復:

我帶新人學物件編程,喜歡讓他們陪我下圍棋(中午休息,如果不想睡,可以殺一盤)

why,其實這個程序和學物件化的程序一樣。
物件化最終是策略,方法論,是風險評估和預測。而不是寫代碼,真正入門物件化的人實際并不會對如何寫代碼糾結。
物件化入門的人反而糾結的是可以選擇的方向太多了,到底那種方向才能更符合未來的。

話說回來,干嘛讓他們下圍棋,其實看看下圍棋怎么入門的。
第一步死活,你的告訴他,那死,那活。怎么保證活,這就是現在的,最起碼語法無誤,編譯能過,運行符合預期
第2步殺大龍,過了第一關的人,就得準備殺大龍了,他還不會看大局,一切圍繞著怎么吃掉對方大龍,完全纏繞式攻擊。吃不了對方就敗。這個在剛入門的程式員也是一樣,你給個功能,他們會全力去做加班去做,大局什么的完全不考慮的,成了就成了,敗了就大敗
第3步,背定式。告訴他們固定的解決模式,雖然不是最優,至少不虧。大部分net的人都這步,你開這里就明白了。套框架,玩模式,套分層,玩注入,搞倉儲
第4步 識大局,判形勢,懂保留,玩策略
第5步 其實這步就不用我教了,到這里他會自己有自己玩法了,甚至我還得反過來學他的了

PS:其實你問的抽象這層,真正想弄明白了,至少是第4步,所以我說物件化其實并不適合初學,不過沒關系,就像上面說的。先照著弄把,弄多了。那天悟了就悟了。再不濟也跟這里大多數人一樣,背定時套框架也能有飯吃

uj5u.com熱心網友回復:

學了兩天 似懂非懂 感覺比昨天又理解深了一點

uj5u.com熱心網友回復:

參考 10 樓 wanghui0380的回復:
你還在學習,所以對于你們來說,這一切難于理解。如果悟性好能理解那還好,悟性不好,只能等你作業了,讓你的產品經理來調教你
(注意:不是技術經理調教你,是產品經理調教你,產品經理各種天馬行空,稀奇古怪的玩法,絕對不止我說那些指鹿為馬,偷梁換柱的搞法,還有更多匪夷所思的玩法。至于你的技術經理通常的要求是“你別總跟產品經理說這個不能做。那個不能搞,你們這樣我開會很難辦啊,人家的問題人家不提,開會的炮火全體炮轟技術,說你們技術不管提啥都是,不會,不行,不能”)


PS:物件化其實是不適合初學者學的東西,他來源于實踐。參考于哲學,方法論,策略論,工程論。初學者其實學python跟容易,所以你看哪怕是學數學的玩python都好辦,你讓一個學數學的過來玩玩物件化估計一年半載都難領會這種“狡詐”的思路

學了兩天 似懂非懂 感覺比昨天又理解深了一點

uj5u.com熱心網友回復:

抽象類和介面的共同點就是,大家跟著約定來實作。
但是抽象類偏向整體概念,
介面是零散的部件。

你就認為,人家幫你定了一個class。
你只要按著人家定義的抽象類繼承實作就好了 。

uj5u.com熱心網友回復:

一位伐木工有三個兒子
父親打算讓兒子們繼承伐木工這份作業
父親死后,三個兒子都繼承了父親這份職業
大兒子覺得父親的用斧頭砍樹的方法很好,依舊用斧頭砍樹
二兒子覺得斧頭砍樹太慢了,就換成電鋸鋸樹
三兒子就有些厲害了,是高壓水槍沖擊大樹



劇情模擬!!!

uj5u.com熱心網友回復:

多型是要跟繼承結合起來看的。比如現在要實作一個動物的產品族,那么首先就要把動物共有的特征羅列出來,比如動物都有吃這個動作,那么可以定義一個Animal類作為父類:
public class Animal
    {
        public virtual void Eat()
        {
            Console.WriteLine("動物吃東西");
        }
    }

由于動物這個概念很抽象,因此接下來就是把動物這個概念具體化,比如動物有貓、狗之類的,這里就需要使用類的繼承:
public class Cat : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是貓,我愛吃魚");
        }
    }

    public class Dog : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是狗,我愛吃肉");
        }
    }

virtual代表虛方法,可以被子類重寫,override就是在子類中重寫父類的虛方法或抽象方法。最后一步就是創建物件,估計樓主一般會使用如下的方法創建物件:
 Cat cat = new Cat();
            Dog dog = new Dog();

這種創建物件的方法能實作目的嗎?當然可以!但這同時也使得程式的靈活性大打折扣,比如現在想要將一個動物類的實體當做形參傳入到函式里面,如果按照上面的寫法,你得同時定義兩個函式:
static void Print(Cat cat)
        {
            cat.Eat();
        }

        static void Print(Dog dog)
        {
            dog.Eat();
        }

這樣的后果就是一旦對動物類別進行擴充,又得對Print函式進行多載,導致程式毫無擴展性。如果利用繼承和多型的特性,可以這么定義函式:
static void Print(Animal animal)
        {
            animal.Eat();
        }

這樣做的好處就是不管是雞鴨牛羊還是其他什么,只要繼承了Animal類,那么都可以當做引數傳進來。所以樓主要習慣利用繼承和多型創建物件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Animal cat = new Cat();
            Print(cat);

            Animal dog = new Dog();
            Print(dog);
        }

        static void Print(Animal animal)
        {
            animal.Eat();
        }
    }

    public class Animal
    {
        public virtual void Eat()
        {
            Console.WriteLine("動物吃東西");
        }
    }

    public class Cat : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是貓,我愛吃魚");
        }
    }

    public class Dog : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是狗,我愛吃肉");
        }
    }

    
}

uj5u.com熱心網友回復:

多型首先要講繼承
 老爹是個C#程式員,
 兒子繼承了老爹,并且會用C# 這是繼承

多型
兒子繼承了爹的C#,并且學會了java編程,這是多型

至于介面
兒子學會了開車,這是實作了介面

如果看不懂在舉一個例子

緝毒犬繼承了狗這個抽象(你可以說緝毒犬是狗,但不能說狗是緝毒犬)
這是多型
而緝毒這個功能則是實作了介面

總體來說就是
父的行為在兒子的身上有不同的體現,這是多型

uj5u.com熱心網友回復:

多實踐,有的概念慢慢自然理解,摳字眼沒多少用

uj5u.com熱心網友回復:

猴子都要吃東西,
所以 在猴子類里面 加一個 吃東西的方法
不同的猴子 繼承了 猴子類 重寫吃東西的方法
比如說  狐猴  吃 桃    嬰猴 吃 香蕉  懶猴 沒吃到

然后你宣告的時候這樣 
猴子  猴1 = new 狐猴()
猴子  猴2 = new 嬰猴()
猴子  猴3 = new 懶猴()

猴1 猴2 猴3  都是猴子類 ,
但是 你呼叫
猴1.吃東西()
猴2.吃東西()
猴3.吃東西()
是不同的  
這就是多型~

uj5u.com熱心網友回復:

參考 11 樓 wanghui0380的回復:
我帶新人學物件編程,喜歡讓他們陪我下圍棋(中午休息,如果不想睡,可以殺一盤)

why,其實這個程序和學物件化的程序一樣。
物件化最終是策略,方法論,是風險評估和預測。而不是寫代碼,真正入門物件化的人實際并不會對如何寫代碼糾結。
物件化入門的人反而糾結的是可以選擇的方向太多了,到底那種方向才能更符合未來的。

話說回來,干嘛讓他們下圍棋,其實看看下圍棋怎么入門的。
第一步死活,你的告訴他,那死,那活。怎么保證活,這就是現在的,最起碼語法無誤,編譯能過,運行符合預期
第2步殺大龍,過了第一關的人,就得準備殺大龍了,他還不會看大局,一切圍繞著怎么吃掉對方大龍,完全纏繞式攻擊。吃不了對方就敗。這個在剛入門的程式員也是一樣,你給個功能,他們會全力去做加班去做,大局什么的完全不考慮的,成了就成了,敗了就大敗
第3步,背定式。告訴他們固定的解決模式,雖然不是最優,至少不虧。大部分net的人都這步,你開這里就明白了。套框架,玩模式,套分層,玩注入,搞倉儲
第4步 識大局,判形勢,懂保留,玩策略
第5步 其實這步就不用我教了,到這里他會自己有自己玩法了,甚至我還得反過來學他的了

PS:其實你問的抽象這層,真正想弄明白了,至少是第4步,所以我說物件化其實并不適合初學,不過沒關系,就像上面說的。先照著弄把,弄多了。那天悟了就悟了。再不濟也跟這里大多數人一樣,背定時套框架也能有飯吃

我是個編程小白 您說的我現在還不能完全理解

uj5u.com熱心網友回復:

參考 16 樓 HerryDong的回復:
多型是要跟繼承結合起來看的。比如現在要實作一個動物的產品族,那么首先就要把動物共有的特征羅列出來,比如動物都有吃這個動作,那么可以定義一個Animal類作為父類:
public class Animal
    {
        public virtual void Eat()
        {
            Console.WriteLine("動物吃東西");
        }
    }

由于動物這個概念很抽象,因此接下來就是把動物這個概念具體化,比如動物有貓、狗之類的,這里就需要使用類的繼承:
public class Cat : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是貓,我愛吃魚");
        }
    }

    public class Dog : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是狗,我愛吃肉");
        }
    }

virtual代表虛方法,可以被子類重寫,override就是在子類中重寫父類的虛方法或抽象方法。最后一步就是創建物件,估計樓主一般會使用如下的方法創建物件:
 Cat cat = new Cat();
            Dog dog = new Dog();

這種創建物件的方法能實作目的嗎?當然可以!但這同時也使得程式的靈活性大打折扣,比如現在想要將一個動物類的實體當做形參傳入到函式里面,如果按照上面的寫法,你得同時定義兩個函式:
static void Print(Cat cat)
        {
            cat.Eat();
        }

        static void Print(Dog dog)
        {
            dog.Eat();
        }

這樣的后果就是一旦對動物類別進行擴充,又得對Print函式進行多載,導致程式毫無擴展性。如果利用繼承和多型的特性,可以這么定義函式:
static void Print(Animal animal)
        {
            animal.Eat();
        }

這樣做的好處就是不管是雞鴨牛羊還是其他什么,只要繼承了Animal類,那么都可以當做引數傳進來。所以樓主要習慣利用繼承和多型創建物件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Animal cat = new Cat();
            Print(cat);

            Animal dog = new Dog();
            Print(dog);
        }

        static void Print(Animal animal)
        {
            animal.Eat();
        }
    }

    public class Animal
    {
        public virtual void Eat()
        {
            Console.WriteLine("動物吃東西");
        }
    }

    public class Cat : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是貓,我愛吃魚");
        }
    }

    public class Dog : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("我是狗,我愛吃肉");
        }
    }

    
}

謝謝大佬  

uj5u.com熱心網友回復:

大佬我想問下那個Print這個方法是啥意思

uj5u.com熱心網友回復:

說句白話,按照遺傳來說明,你父親會給你帶來基因遺傳,而你有自己的特性。

這就是多型。

還有一個就是 你父親說了句話,你不同意就給改了然后又告訴給人,這也是多型的一種。 

uj5u.com熱心網友回復:

參考 22 樓 qq_38341334 的回復:
大佬我想問下那個Print這個方法是啥意思
Print就是一個普通的方法,在里面呼叫Animal類的Eat方法,它的形參是一個Animal實體,只要某個類繼承了Animal類,那么這個類的實體就可以當做引數傳遞進去,因為子類可以隱式轉換為父類。

uj5u.com熱心網友回復:

其實就是人類對于事物的一種分類方法,把多個有相似功能或結構的事物統一一個分類。比如行駛在路上的東西叫做車,車就相當于一個介面,車又分為很多種,比如摩托車、小轎車、越野車等等,這些都可以歸為車這個類別,這就是多型了

uj5u.com熱心網友回復:

抽象類嘛,就是不能實體化的類,不能把他具體出來,比如動物就是抽象類,而狗就可以理解為它的子類,你可以實體化為一條狗,而抽象類動物就不可以

uj5u.com熱心網友回復:

看大佬解釋,跟著學習下

uj5u.com熱心網友回復:

參考 2 樓 qq_38341334 的回復:
Quote: 參考 1 樓 tangyanzhi1111的回復:
多型 簡單來說 就是  OOP的多種形態


比如說 猴子,有十幾個種類,狐猴、懶猴、嬰猴、指猴、跗猴等


為了把這些猴子的共同形態抽象出來,做成一個介面,讓其它各自有自己特征的猴子繼承


這種模式就稱之為多型

介面我還沒學到  剛學到多型  花費了一天時間來理解 感覺似懂非懂
很正常,有的程式員作業了2年才真正明白了oop當然誰都不例外

uj5u.com熱心網友回復:

學習下

uj5u.com熱心網友回復:

爸爸有三個兒子,哥哥,弟弟和你,你們都繼承你爸抽煙的習慣,同樣是抽煙,但你喜歡抽玉溪,哥哥喜歡抽中華,弟弟喜歡抽紅梅。這就是多型,繼承父類,實作父類的成員,有不同的表現。這樣好處是,你不用再宣告一個你會抽煙的方法,哥哥也不用再宣告一個會抽煙的方法~~

uj5u.com熱心網友回復:

你知道猴子(抽象類)會吃飯(抽象類里沒有具體實作的方法),具體怎么吃(實作類中方法的實作)就是每個猴子(實作類)自己的事了

uj5u.com熱心網友回復:

總之就是對一個事物逐漸的抽象。最頂的就是最基本的。越往下分類越多。金字塔結構

uj5u.com熱心網友回復:

OPP的多種形態

uj5u.com熱心網友回復:

大神門都好有耐心啊!!!其實這些剛學沒必要搞得那么懂,后面練手慢慢就懂了

uj5u.com熱心網友回復:

子類可以變換的

uj5u.com熱心網友回復:

書桌上有3本書,你現在要收拾書桌,那動作是  第一本書 .放書架 ,第二本書.放書架,第三本書.放書架。
這動作有點重復,想到了用回圈,把書放到一個集合去。
桌子上的書={第一本書,第二本書,第三本書}
for each 書 in 桌子上的書
書.放書架
next
完美。

但桌上除了書,還有茶杯、廢紙,要收拾有點麻煩, 第一本書 .放書架 ,第二本書.放書架,第三本書.放書架,一個茶杯.倒茶渣,一個廢紙.扔廢紙簍。
要還是想用一個指令收拾就有點麻煩了,放不到一個集合,回圈呼叫的方法也不一樣。

多型就派上用場了,這些東西都可以抽象為桌上的東西,有收拾方法。
定義一個  “桌上東西” 類,有一個 “收拾”方法。
書、茶杯、廢紙 派生與“桌上物品”,實作各自的“收拾”方法,內容分別是放書架、倒茶渣、扔廢紙簍。

現在就可以繼續愉快的用回圈了
桌上的物品={第一本書,第二本書,第三本書,一個茶杯,一張廢紙}
for each 物品 in 桌上的物品
物品.收拾
next

uj5u.com熱心網友回復:

抽象,抽象,抽象。我一開始也不能理解,為什么叫抽象,抽象這個詞應該是從哲學中來的,就是把一些相同的實際的東西,總結其特點,變成一個可以代表這些東西的一個概念,用到編程中的意思就是,把很多相同的類,總結他們的相同的特點,然后總結出一個可以代表這些類的類。

uj5u.com熱心網友回復:

多型一種形式多種狀態

uj5u.com熱心網友回復:


其實就是同一個函式在不同類中不同表現
舉個栗子:

public class A
{
    public virtual void Log()
    {
        Console.WriteLine("123");
    }
}

public class B:A
{
    public override void Log()
    {
        Console.WriteLine("321");
    }
}

在A的時候輸出123,在B的時候輸出321
當你呼叫的時候就可以

uj5u.com熱心網友回復:

public interface  IA
{
  void Log();
}

public class B:IA
{
    public  void Log()
    {
        Debug.Log("321");
    }
}
public class C : IA
{
    public  void Log()
    {
        Debug.Log("321");
    }
}

不同的類繼承介面后相同的函式不同的表現

uj5u.com熱心網友回復:

多型,顧名思義就是多種形態。是指父類通過指向不同的子類而表現出的特性,因為子類對父類方法的實作不同,所以當父類指向不同子類時,通過父類呼叫父類方法,執行結果不同

uj5u.com熱心網友回復:

比如動物這個類,有吃東西這個能力,狗是動物,豬也是動物,但是吃東西是不一樣的,

uj5u.com熱心網友回復:

從軟體工程來講  多型可以簡化成  介面  方法  的多型            不同的方法實作介面定義的這個方法    就是多型了。    基于介面  方法    比較好理解。不同的類似的方法可以實作介面的同一個方法。一般一個介面寫一個方法   讓子類的不同的方法去實作這個介面的方法。          這樣就是多型  松耦合了,同時也是簡單的基于介面的編程。  繼承少用為好    基本上被專家們判死刑了。因為繼承增加了耦合性,無法很好的進行多型,擴展。

uj5u.com熱心網友回復:

參考 樓主 qq_38341334的回復:
今天學習到c#的抽象類 感覺有點懵 有大神能用通俗易懂的語言解答下嗎    

面向物件語言是要有一個思維的轉換,C#,JAVA,還有其他的面向物件,解釋什么是抽象類,這些找個網課視頻都有!最主要的是您要明白他的作用是什么!說的是它在你整程式中的作用,比如if陳述句是用來判斷的,對于抽象類,它會轉換為后期的介面,等講到借口你就會發現,你管穿了這個內容,現在講抽象類,是為了讓你在后講介面更好的理解,總歸言之,對于學編程語言,就是多敲代碼,現在初期一天300行代碼,認真的去敲一遍會發現你基本上屬于自己慢慢能運用了!

uj5u.com熱心網友回復:

多敲代碼是最好的方法

uj5u.com熱心網友回復:

參考 樓主 qq_38341334 的回復:
今天學習到c#的抽象類 感覺有點懵 有大神能用通俗易懂的語言解答下嗎    


人  都有尿尿的方法。
男人的尿尿方法是 站著的
女人的尿尿方法是 蹲著的

同樣是尿尿,不同類別的人,表現出來是不一樣的,這就是多型。

uj5u.com熱心網友回復:

說句白話,按照遺傳來說明,你父親會給你帶來基因遺傳,而你有自己的特性。

這就是多型。

還有一個就是 你父親說了句話,你不同意就給改了然后又告訴給人,這也是多型的一種。

uj5u.com熱心網友回復:

一篇面向物件基礎的博客: https://blog.csdn.net/MrBaymax/article/details/84308600

uj5u.com熱心網友回復:

諸位很努力了。
觀程式員世界,極少是老師出身的,那么傳播知識必會造成障礙。
包括經典教材,舉的例子甚至不如看了教材并在行業內幾年經驗的過來人說得明白……

要想把語言通俗點講解,必需要用受眾能理解的事物來。

現在看來,必是游戲無疑。

委托不就是你去接任務?

事件不就是你打怪的進度通知?

選人界面下的各個職業它們最終不是同一個父類,這就是多型了啊!它們不是有共用的東西,叫介面?如攻擊防御魔法

這是我最近又重回WOW時的發現,里面隨便拿一些東西來說都滿滿是編程的思想。



轉載請註明出處,本文鏈接:https://www.uj5u.com/net/122620.html

標籤:C#

上一篇:C# 圖表 Area 分不夠可以加

下一篇:Response.AddHeader 下載問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more