亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

一個在C#以及類似的面向對象系統(Java中估計也是如此)中常見的錯誤

2024-07-21 02:27:13
字體:
來源:轉載
供稿:網友

 

using system;

namespace demo
{
    class classa
    {
        protected string a = "test";

        public void display()
        {
            console.writeline(a);
        }
    }

    class classb:classa
    {
        protected string a = "another test";
    }
    /**//// <summary>
    /// summary description for class1.
    /// </summary>
    class class1
    {
        /**//// <summary>
        /// the main entry point for the application.
        /// </summary>
        [stathread]
        static void main(string[] args)
        {
            //
            // todo: add code to start application here
            //
            classb instance = new classb();
            instance.display();
            ((classa)instance).display();
            console.readline();
        }
    }
}

此時控制臺輸出的內容兩次都是test
但是如果做如下修改:


using system;

namespace demo
{
    class classa
    {
        private string _a = "test";
        protected virtual string a
        {
            get
            {
                return _a;
            }
            set
            {
                _a = value;
            }
        }

        public void display()
        {
            console.writeline(a);
        }
    }

    class classb:classa
    {
        private string _deriveda = "another string";
        protected override string a
        {
            get
            {
                return _deriveda;
            }
            set
            {
                _deriveda = value;
            }
        }
    }
    /**//// <summary>
    /// summary description for class1.
    /// </summary>
    class class1
    {
        /**//// <summary>
        /// the main entry point for the application.
        /// </summary>
        [stathread]
        static void main(string[] args)
        {
            //
            // todo: add code to start application here
            //
            classb instance = new classb();
            instance.display();
            ((classa)instance).display();
            console.readline();
        }
    }
}

那么控制臺輸出的都是:another test
如果我們做如下修改,

using system;

namespace demo
{
    class classa
    {
        private string _a = "test";
        protected virtual string a
        {
            get
            {
                return _a;
            }
            set
            {
                _a = value;
            }
        }

        public virtual void display()
        {
            console.writeline(a);
        }
    }

    class classb:classa
    {
        private string _deriveda = "another string";
        protected new string a
        {
            get
            {
                return _deriveda;
            }
            set
            {
                _deriveda = value;
            }
        }

        public new void display()
        {
            console.writeline(a);
        }
    }
    /**//// <summary>
    /// summary description for class1.
    /// </summary>
    class class1
    {
        /**//// <summary>
        /// the main entry point for the application.
        /// </summary>
        [stathread]
        static void main(string[] args)
        {
            //
            // todo: add code to start application here
            //
            classb instance = new classb();
            instance.display();
            ((classa)instance).display();
            console.readline();
        }
    }
}
那么程序的輸出結果是:
another test
test

很有趣的一件事情,因為我在項目的源代碼中發現了一個因為誤用而引起的錯誤
如下:


using system;

namespace demo
{
    class classa
    {
        protected string a = null;

        public void display()
        {
            console.writeline(a);
        }
    }

    class classb:classa
    {
        protected string a = "another test";
    }
    /**//**//**//// <summary>
    /// summary description for class1.
    /// </summary>
    class class1
    {
        /**//**//**//// <summary>
        /// the main entry point for the application.
        /// </summary>
        [stathread]
        static void main(string[] args)
        {
            //
            // todo: add code to start application here
            //
            classb instance = new classb();
            instance.display();
            console.readline();
        }
    }
}于是在程序的運行中產生nullreferenceexception
posted on 2005-06-15 16:32 dark 閱讀(1468) 評論(9)  編輯 收藏 收藏至365key


評論
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
在派生類如果要寫一個函數替代父類的同名函數必須用new操作符,否則實際的執行效果是不確定的,
比如你這種情況如果想要classb的實例在不override的情況下執行自己的display要這樣定義display:
public new void display()
{
...
}
2005-06-15 16:58 | teddy's knowledge base
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
你有這種問題,只能說明oo不到家,還要好好學習一下阿!
2005-06-15 17:21 | hon young
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
實際執行的效果都是確定的,不管是在.net還是在java系統中,在java中是如何確定的我就不是很清楚了,問題在于這些面向對象的規則即決定具體行為的規則最好能夠以iso的方式規范化就好了,不管是在c++,.net,java還是python中,我們都能夠獲得相同的語義
2005-06-15 17:26 | mixed it up
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
是理解oo的錯誤。
class classa
{
protected string a = "test";

public void display()
{
console.writeline(a);
}
}

class classb:classa
{
protected string a = "another test";
}
等于classa有一個string a,classb 也有一個string a,二者不同的,是2個變量。
2005-06-15 17:34 | pierce
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
不是...很明白第三種情況....強制轉換類型之后變量也用了基類的變量.....難道是我一直理解錯了...
2005-06-15 18:44 | 補丁
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
這樣的輸出才是符合oo原理的
2005-06-15 20:27 | 男
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
這叫錯誤?好好學學oo再做事吧,暈。
2005-06-16 09:36 | yun
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
to all:

我可以建議大家去看看侯杰的《c++對象模型》,就能很好的理解為什么是這樣了。比如把一個子類對象強制轉換為基類對象,其實編譯器處理就是把該對象作為基類對象來處理(即對象的slip)。當然調用的方法也是基類的方法,和子類無關。

to hon young :其實你也說錯了, 這不能說是oo的范疇(oo僅僅是一種思想),應該是編譯器的對象模型范疇(是一種存技術)

總之,大家要知道,等編譯完成后,所有的內存分布及調用(地址偏移量)都已經確定了....

請瀏覽《希望這篇文章對理解c#的對象模型有所幫助 》:http://www.cnblogs.com/caomao/archive/2005/06/16/175459.html
2005-06-16 10:08 | zendyhu
# re: 一個在c#以及類似的面向對象系統(java中估計也是如此)中常見的錯誤  回復   
先收藏做個標記

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人免费网| 亚洲成人精品久久久| 久99久在线视频| 日日狠狠久久偷偷四色综合免费| 欧美日韩在线第一页| 北条麻妃一区二区三区中文字幕| 欧美韩国理论所午夜片917电影| 成人国产精品色哟哟| 91影视免费在线观看| 久久免费视频网| 欧美激情女人20p| 日韩中文综合网| 亚洲国产高清福利视频| 欧美日韩成人免费| 日韩成人在线播放| 国产狼人综合免费视频| 国语自产精品视频在线看一大j8| 一区二区三区 在线观看视| 国产精品激情av电影在线观看| 91国产中文字幕| 国产精品中文在线| 色爱av美腿丝袜综合粉嫩av| 欧美日韩aaaa| 黑人精品xxx一区| 国产精品久久久久9999| 欧美日韩色婷婷| 国产精品视频一区二区高潮| 91探花福利精品国产自产在线| 国产在线拍偷自揄拍精品| 亚洲一区亚洲二区亚洲三区| 97久久精品在线| 日韩网站在线观看| 伊人av综合网| 国产精品福利网| 欧美激情2020午夜免费观看| 性金发美女69hd大尺寸| 亚洲精品美女在线观看| 国产在线观看精品一区二区三区| 国产一区二区三区免费视频| 97国产在线观看| 国产精品va在线| 久久久久久亚洲精品不卡| 欧美性猛交xxxx富婆弯腰| 国产亚洲日本欧美韩国| 精品国产91乱高清在线观看| 亚洲一区二区在线| 日本精品va在线观看| 17婷婷久久www| 欧美一级黄色网| 久久69精品久久久久久久电影好| 国产成人亚洲综合91| 久久久国产影院| 毛片精品免费在线观看| 国产成人精品a视频一区www| 久久久av免费| 综合网中文字幕| 51午夜精品视频| 亚洲精品日韩丝袜精品| 亚洲专区在线视频| 亚洲国产美女精品久久久久∴| 久久久女女女女999久久| 91高潮在线观看| 中日韩午夜理伦电影免费| 国产欧美一区二区三区视频| 欧美专区在线观看| 亚洲自拍欧美另类| 国产精品自在线| 日韩福利视频在线观看| 欧美理论电影网| 成人综合国产精品| 国产精品私拍pans大尺度在线| 亚洲福利精品在线| 日韩电视剧在线观看免费网站| 欧美夜福利tv在线| 91福利视频网| 国产一区二区黑人欧美xxxx| 亚洲精品mp4| 亚洲激情视频网站| 久久精品视频在线| 欧美精品videosex极品1| 国产精品福利片| 欧美日韩国产丝袜另类| 精品亚洲aⅴ在线观看| 97成人精品区在线播放| 九九热视频这里只有精品| 91亚洲精品视频| 国产精品99免视看9| 在线看日韩av| 色yeye香蕉凹凸一区二区av| 亚洲精品在线不卡| 日韩高清欧美高清| 亚洲电影免费观看高清完整版在线观看| 91久久国产精品91久久性色| 伊人青青综合网站| 九九久久精品一区| 国产日韩中文字幕在线| 中文字幕日韩欧美在线视频| 国产日韩欧美中文| 久久精品国产成人精品| 亚洲精品视频二区| 成人夜晚看av| 最新国产精品亚洲| 亚洲国产小视频| 国产成人福利夜色影视| 国产成人精品在线视频| 亚洲综合大片69999| 国产色婷婷国产综合在线理论片a| 91亚洲国产成人久久精品网站| 国产精品中文字幕久久久| 精品国产乱码久久久久酒店| 国产精品久久视频| 精品久久中文字幕| 日韩69视频在线观看| 久久国产精品久久精品| 久久韩剧网电视剧| 国产精品女主播| 黄色一区二区在线| 亚洲国产欧美日韩精品| 色婷婷成人综合| 欧美在线视频观看免费网站| 欧美大片在线看免费观看| 一区国产精品视频| 欧美日本啪啪无遮挡网站| 日韩精品视频免费| 色综合伊人色综合网| 在线成人一区二区| 午夜欧美不卡精品aaaaa| 日韩专区中文字幕| 97精品国产97久久久久久| 久久免费观看视频| 久久久在线免费观看| 亚洲激情小视频| 久久天天躁狠狠躁夜夜躁2014| 国产国语刺激对白av不卡| 国产精选久久久久久| 午夜免费在线观看精品视频| 日韩性xxxx爱| 日韩美女在线播放| 亚洲午夜性刺激影院| 一本大道久久加勒比香蕉| 国产精品一区二区性色av| 夜色77av精品影院| 欧美成人sm免费视频| 97视频在线观看成人| 深夜福利日韩在线看| 91精品国产91久久久久久吃药| 欧美亚洲成人精品| 国产精品第一页在线| 日韩精品视频在线观看网址| 国产成人97精品免费看片| 欧美疯狂性受xxxxx另类| 成人中文字幕+乱码+中文字幕| 精品美女久久久久久免费| 精品国产欧美成人夜夜嗨| 欧美性xxxxhd| 国产精品观看在线亚洲人成网| 亚洲欧美福利视频| 欧美日韩精品在线观看| 欧美成人精品在线| 深夜成人在线观看| 欧美xxxx18性欧美| 66m—66摸成人免费视频| 欧美日韩亚洲一区二区| 中文字幕精品在线|