青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

cc

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  38 隨筆 :: 14 文章 :: 21 評論 :: 0 Trackbacks
 

11.可以使用抽象函數(shù)重寫基類中的虛函數(shù)嗎?答:可以,但需使用 new 修飾符顯式聲明,表示隱藏了基類中該函數(shù)的實現(xiàn)

示例:

    class BaseClass
    {
        public virtual void F()
        {
            Console.WriteLine("BaseClass.F");
        }
    }
    abstract class DeriveClass : BaseClass
    {
        public new abstract void F();
    }

12.密封類可以有虛函數(shù)嗎?答:可以,基類中的虛函數(shù)將隱式的轉(zhuǎn)化為非虛函數(shù),但密封類本身不能再增加新的虛函數(shù)

示例:

    class BaseClass
    {
        public virtual void F()
        {
            Console.WriteLine("BaseClass.F");
        }
    }
    sealed class DeriveClass : BaseClass
    {
        //基類中的虛函數(shù)F被隱式的轉(zhuǎn)化為非虛函數(shù)

        //密封類中不能再聲明新的虛函數(shù)G
        //public virtual void G()
        //{
        //    Console.WriteLine("DeriveClass.G");
        //}
    }

13.如果基類中的虛屬性只有一個屬性訪問器,那么繼承類重寫該屬性后可以有幾個屬性訪問器?如果基類中有 get 和 set 兩個呢?

答:如果基類中的虛屬性只有一個屬性訪問器,那么繼承類重寫該屬性后也應(yīng)只有一個。如果基類中有 get 和 set 兩個屬性訪問器,那么繼承類中可以只有一個也可以同時有兩個屬性訪問器


14.abstract 可以和 virtual 一起使用嗎?可以和 override 一起使用嗎?

答:abstract 修飾符不可以和 static、virtual 和 override 修飾符一起使用

15.接口可以包含哪些成員?答:接口可以包含屬性、方法、索引指示器和事件,但不能包含常量、域、操作符、構(gòu)造函數(shù)和析構(gòu)函數(shù),而且也不能包含任何靜態(tài)成員

16.類和結(jié)構(gòu)的區(qū)別?答:

類:類是引用類型在堆上分配,類的實例進(jìn)行賦值只是復(fù)制了引用,都指向同一段實際對象分配的內(nèi)存

類有構(gòu)造和析構(gòu)函數(shù)

類可以繼承和被繼承

結(jié)構(gòu):

結(jié)構(gòu)是值類型在棧上分配(雖然棧的訪問速度比較堆要快,但棧的資源有限放),結(jié)構(gòu)的賦值將分配產(chǎn)生一個新的對象。

結(jié)構(gòu)沒有構(gòu)造函數(shù),但可以添加。結(jié)構(gòu)沒有析構(gòu)函數(shù)

結(jié)構(gòu)不可以繼承自另一個結(jié)構(gòu)或被繼承,但和類一樣可以繼承自接口

 

示例:

根據(jù)以上比較,我們可以得出一些輕量級的對象最好使用結(jié)構(gòu),但數(shù)據(jù)量大或有復(fù)雜處理邏輯對象最好使用類。

如:Geoemtry(GIS 里的一個概論,在 OGC 標(biāo)準(zhǔn)里有定義) 最好使用類,而 Geometry 中點的成員最好使用結(jié)構(gòu)

using System;
using System.Collections.Generic;
using System.Text;

namespace Example16
{
    interface IPoint
    {
        double X
        {
            get;
            set;
        }
        double Y
        {
            get;
            set;
        }
        double Z
        {
            get;
            set;
        }
    }
    //結(jié)構(gòu)也可以從接口繼承
    struct Point: IPoint
    {
        private double x, y, z;
        //結(jié)構(gòu)也可以增加構(gòu)造函數(shù)
        public Point(double X, double Y, double Z)
        {
            this.x = X;
            this.y = Y;
            this.z = Z;
        }
        public double X
        {
            get { return x; }
            set { x = value; }
        }
        public double Y
        {
            get { return x; }
            set { x = value; }
        }
        public double Z
        {
            get { return x; }
            set { x = value; }
        }
    }
    //在此簡化了點狀Geometry的設(shè)計,實際產(chǎn)品中還包含Project(坐標(biāo)變換)等復(fù)雜操作
    class PointGeometry
    {
        private Point value;
       
        public PointGeometry(double X, double Y, double Z)
        {
            value = new Point(X, Y, Z);
        }
        public PointGeometry(Point value)
        {
            //結(jié)構(gòu)的賦值將分配新的內(nèi)存
            this.value = value;
        }
        public double X
        {
            get { return value.X; }
            set { this.value.X = value; }
        }
        public double Y
        {
            get { return value.Y; }
            set { this.value.Y = value; }
        }
        public double Z
       {
            get { return value.Z; }
            set { this.value.Z = value; }
        }
        public static PointGeometry operator +(PointGeometry Left, PointGeometry Rigth)
        {
            return new PointGeometry(Left.X + Rigth.X, Left.Y + Rigth.Y, Left.Z + Rigth.Z);
        }
        public override string ToString()
        {
            return string.Format("X: {0}, Y: {1}, Z: {2}", value.X, value.Y, value.Z);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Point tmpPoint = new Point(1, 2, 3);

            PointGeometry tmpPG1 = new PointGeometry(tmpPoint);
            PointGeometry tmpPG2 = new PointGeometry(tmpPoint);
            tmpPG2.X = 4;
            tmpPG2.Y = 5;
            tmpPG2.Z = 6;

            //由于結(jié)構(gòu)是值類型,tmpPG1 和 tmpPG2 的坐標(biāo)并不一樣
            Console.WriteLine(tmpPG1);
            Console.WriteLine(tmpPG2);

            //由于類是引用類型,對tmpPG1坐標(biāo)修改后影響到了tmpPG3
            PointGeometry tmpPG3 = tmpPG1;
            tmpPG1.X = 7;
            tmpPG1.Y = 8;
            tmpPG1.Z = 9;
            Console.WriteLine(tmpPG1);
            Console.WriteLine(tmpPG3);

            Console.ReadLine();
        }
    }
}
結(jié)果:
X: 1, Y: 2, Z: 3
X: 4, Y: 5, Z: 6
X: 7, Y: 8, Z: 9
X: 7, Y: 8, Z: 9
17.接口的多繼承會帶來哪些問題?

答:C# 中的接口與類不同,可以使用多繼承,即一個子接口可以有多個父接口。但如果兩個父成員具有同名的成員,就產(chǎn)生了二義性(這也正是 C# 中類取消了多繼承的原因之一),這時在實現(xiàn)時最好使用顯式的聲明

示例:

using System;
using System.Collections.Generic;
using System.Text;

namespace Example17
{
    class Program
    {
        //一個完整的接口聲明示例
        interface IExample
        {
            //屬性
            string P
            {
                get;
                set;
            }
            //方法
            string F(int Value);
            //事件
            event EventHandler E;
            //索引指示器
            string this[int Index]
            {
                get;
                set;
            }
        }
        interface IA
        {
            int Count { get; set;}
        }
        interface IB
        {
            int Count();
        }
        //IC接口從IA和IB多重繼承
        interface IC : IA, IB
        {
        }
        class C : IC
        {
            private int count = 100;
            //顯式聲明實現(xiàn)IA接口中的Count屬性
            int IA.Count
            {
                get { return 100; }
                set { count = value; }
            }
            //顯式聲明實現(xiàn)IB接口中的Count方法
            int IB.Count()
            {
                return count * count;
            }
        }
        static void Main(string[] args)
        {
            C tmpObj = new C();

            //調(diào)用時也要顯式轉(zhuǎn)換
            Console.WriteLine("Count property: {0}", ((IA)tmpObj).Count);
            Console.WriteLine("Count function: {0}", ((IB)tmpObj).Count());

            Console.ReadLine();
        }
    }
}
結(jié)果:
Count property: 100
Count function: 10000


18.抽象類和接口的區(qū)別?

答:

抽象類(abstract class)可以包含功能定義和實現(xiàn),接口(interface)只能包含功能定義

抽象類是從一系列相關(guān)對象中抽象出來的概念, 因此反映的是事物的內(nèi)部共性;接口是為了滿足外部調(diào)用而定義的一個功能約定, 因此反映的是事物的外部特性

分析對象,提煉內(nèi)部共性形成抽象類,用以表示對象本質(zhì),即“是什么”

為外部提供調(diào)用或功能需要擴(kuò)充時優(yōu)先使用接口


19.別名指示符是什么?

答:

通過別名指示符我們可以為某個類型起一個別名

主要用于解決兩個命名空間內(nèi)有同名類型的沖突或避免使用冗余的命名空間

別名指示符只在一個單元文件內(nèi)起作用

示例:

Class1.cs:

using System;
using System.Collections.Generic;
using System.Text;

namespace com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01
{
    class Class1
    {
        public override string ToString()
        {
            return "com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01's Class1";
        }
    }
}
Class2.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02
{
    class Class1
    {
        public override string ToString()
        {
            return "com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02's Class1";
        }
    }
}
主單元(Program.cs):

using System;
using System.Collections.Generic;
using System.Text;

//使用別名指示符解決同名類型的沖突
using Lib01Class1 = com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01.Class1;
using Lib02Class2 = com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02.Class1;

namespace Example19
{
    class Program
    {
        static void Main(string[] args)
        {
            Lib01Class1 tmpObj1 = new Lib01Class1();
            Lib02Class2 tmpObj2 = new Lib02Class2();

            Console.WriteLine(tmpObj1);
            Console.WriteLine(tmpObj2);

            Console.ReadLine();
        }
    }
}
結(jié)果:
com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01's Class1
com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02's Class1

posted on 2008-07-16 09:39 醒目西西 閱讀(151) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情精品久久久久久黑人 | 欧美综合国产| 日韩一区二区精品在线观看| 在线观看成人网| 亚洲国产精品久久人人爱蜜臀| 黄色成人av网站| 在线观看日韩国产| 亚洲毛片av| 午夜一区在线| 久热精品视频在线观看| 欧美α欧美αv大片| 亚洲高清一二三区| 91久久精品美女高潮| 日韩午夜免费| 欧美专区在线观看| 欧美精品一区二区三区高清aⅴ| 欧美三级资源在线| 国内久久视频| 在线视频欧美日韩精品| 久久视频在线视频| 亚洲日本理论电影| 亚洲欧美一区二区在线观看| 久久资源av| 国产精品久久久久久久7电影| 国产专区精品视频| 亚洲色无码播放| 久久综合五月| 亚洲一区999| 免费看精品久久片| 国产欧美一区二区三区久久 | 99国产精品私拍| 久久精品91| 国产精品国产三级国产aⅴ9色 | 欧美自拍偷拍午夜视频| 亚洲精品国产无天堂网2021| 久久国产加勒比精品无码| 欧美日韩中文字幕| 91久久久久久久久久久久久| 欧美在线观看一区二区| 亚洲精品一区中文| 女人色偷偷aa久久天堂| 国产亚洲精品久久久| 亚洲午夜电影| 亚洲国产精品一区二区第四页av | 久久国产一区| 国产精品日韩| 艳女tv在线观看国产一区| 免费久久99精品国产自在现线| 一区二区三区产品免费精品久久75 | 欧美精品自拍偷拍动漫精品| 精品动漫3d一区二区三区免费| 午夜欧美大片免费观看| 亚洲精选久久| 欧美激情在线免费观看| 91久久久久久久久| 亚洲第一综合天堂另类专| 久久尤物视频| 亚洲成人在线视频播放| 猫咪成人在线观看| 久久久久欧美精品| 一区二区视频在线观看| 久久男人资源视频| 久久精品亚洲| 亚洲国产美女| 亚洲三级免费| 国产精品va在线播放我和闺蜜| 亚洲一区二区成人在线观看| 一区二区欧美日韩| 国产精品三区www17con| 羞羞色国产精品| 欧美一级一区| 经典三级久久| 亚洲电影第1页| 欧美日产在线观看| 亚洲伊人网站| 欧美一区二区三区免费观看 | 国产精品久久久久91| 午夜老司机精品| 久久精品成人欧美大片古装| 亚洲电影下载| 99人久久精品视频最新地址| 国产精品视频精品| 久久久午夜电影| 男人的天堂亚洲| 一区二区三区精品视频| 亚洲男女自偷自拍| 在线成人性视频| 一区二区三区免费观看| 国产一区二区三区免费不卡| 欧美激情精品久久久久久黑人| 欧美日韩人人澡狠狠躁视频| 久久精品亚洲乱码伦伦中文| 欧美高清自拍一区| 久久精品盗摄| 欧美日韩1080p| 免费看成人av| 亚洲国产日韩一区二区| 亚洲日本视频| 国产精品自拍一区| 亚洲国产欧美久久| 国产免费一区二区三区香蕉精| 久久综合伊人77777蜜臀| 欧美日韩国产欧美日美国产精品| 久久国产视频网| 欧美破处大片在线视频| 久久青草欧美一区二区三区| 欧美日韩国产页| 另类亚洲自拍| 国产欧美日韩激情| av成人免费在线观看| 亚洲高清视频一区二区| 亚洲欧美日韩精品综合在线观看| 99re热这里只有精品视频| 久久国产日韩| 午夜视频精品| 欧美视频不卡| 亚洲经典自拍| 亚洲国产日本| 久久久久免费视频| 久久蜜桃资源一区二区老牛| 国产精品你懂的在线欣赏| 亚洲美女精品一区| 亚洲日韩中文字幕在线播放| 久久精品国产v日韩v亚洲| 欧美在线视频导航| 国产精品日本一区二区| 99热这里只有成人精品国产| 日韩小视频在线观看专区| 老司机精品视频一区二区三区| 久久精品理论片| 国产嫩草一区二区三区在线观看 | 欧美中文在线观看国产| 欧美一区二区三区四区在线| 国产精品高潮在线| 一区二区三区你懂的| 亚洲一区三区视频在线观看| 欧美日韩亚洲视频一区| aa亚洲婷婷| 午夜在线a亚洲v天堂网2018| 国产精品亚洲成人| 久久精品国产综合| 免费视频一区| 亚洲精品一区二区三区99| 欧美激情一区在线| 国产精品99久久久久久宅男| 欧美亚洲色图校园春色| 国产午夜一区二区三区| 久久gogo国模啪啪人体图| 久久综合亚洲社区| 亚洲激情小视频| 欧美日韩国语| 亚洲欧美在线免费| 久久人人97超碰国产公开结果| 在线观看一区二区视频| 毛片基地黄久久久久久天堂| 亚洲欧洲日本一区二区三区| 一区二区三区四区五区视频| 国产精品二区三区四区| 久久riav二区三区| 亚洲国产1区| 欧美日韩国产区一| 亚洲欧美激情四射在线日| 国产美女一区| 久久嫩草精品久久久久| 欧美激情一二三区| 亚洲一区二区三区视频| 国产乱人伦精品一区二区| 久久精品国产免费看久久精品| 亚洲夫妻自拍| 欧美亚洲日本国产| 亚洲精品国产精品国自产观看| 国产精品成人aaaaa网站| 久久大香伊蕉在人线观看热2| 亚洲韩国一区二区三区| 久久黄金**| aⅴ色国产欧美| 国产一区二区三区在线观看精品| 你懂的国产精品| 性欧美1819性猛交| 日韩视频一区二区三区在线播放| 久久精品一区二区国产| 一本色道久久综合亚洲精品不卡| 国产自产女人91一区在线观看| 欧美日韩国产bt| 老司机67194精品线观看| 亚洲一区二区在线观看视频| 亚洲国产精品成人综合色在线婷婷 | 国产一区二区丝袜高跟鞋图片| 女生裸体视频一区二区三区| 亚洲欧美日韩专区| 亚洲美女在线观看| 亚洲成人在线免费| 欧美亚洲一区二区三区| 日韩一级大片在线| 欧美大片免费久久精品三p| 欧美一区二区三区视频在线| 一区二区三区|亚洲午夜| 91久久夜色精品国产九色| 国产一区91精品张津瑜| 国产精品国产一区二区 |