天天看點

C# 代碼規範不清楚問題整理1.Field 字段是什麼?什麼是引用字段?2.property和parameter和attribute的差別?3.修飾符和辨別符和關鍵字的差別?4.事件是什麼?事件處理函數是什麼?事件參數是什麼?5.as怎麼使用?6.對象生存期是?7.Struct和Class怎麼選擇?8.非托管資源是指什麼? 9.裝箱、拆箱是什麼?10.方法重載和預設參數?11.值語義、值類型、基類型?12.類的邏輯資料成員是指什麼?13.方法和屬性怎麼選擇?14.構造器?15.替換簽名是什麼?剩下的部分

之前學習隻求了解,從來不記這些專業詞彙,對代碼也沒有優化的想法。現在就回來補課來了TAT

目錄

1.Field 字段是什麼?什麼是引用字段?

2.property和parameter和attribute的差別?

property

parameter

attribute

我看不懂,我人傻了。= =

3.修飾符和辨別符和關鍵字的差別?

修飾符

辨別符

關鍵字

4.事件是什麼?事件處理函數是什麼?事件參數是什麼?

以後用到事件了再回來補充。

5.as怎麼使用?

6.對象生存期是?

7.Struct和Class怎麼選擇?

8.非托管資源是指什麼?

 9.裝箱、拆箱是什麼?

性能這塊也弄不太明白。

10.方法重載和預設參數?

11.值語義、值類型、基類型?

12.類的邏輯資料成員是指什麼?

13.方法和屬性怎麼選擇?

14.構造器?

15.替換簽名是什麼?

不知道,沒查到。

剩下的部分

1.Field 字段是什麼?什麼是引用字段?

引用字段差別于值字段,就是類似指針的字段呗,動态配置設定記憶體之類的。

public class Sample
{
    int m_field;//這個就是字段
    int p_field = new int();//這個可能就是引用字段
}
           
值類型: byte,short,int,long,float,double,decimal,char,bool 和 struct 統稱為值類型。結構和枚舉。
引用類型: string 和 class統稱為引用類型。
  • 值類型的執行個體通常是線上程棧上配置設定的(靜态配置設定),但是在某些情形下可以存儲在堆中。
  • 引用類型的對象總是在程序堆中配置設定(動态配置設定)。

2.property和parameter和attribute的差別?

property

就是類裡為private和protected變量提供接口的那個,get;set;。

可以看成是一種對資料的封裝。

C#3.0引入了Auto-Implemented Properties機制。

為什麼使用屬性?

  要求字段隻能讀或者寫。

  要求限制字段的取值範圍。

  在改變一個字段的值的時候希望改變對象的其他一些狀态。

parameter

參數有四種類型,值參數,引用參數,輸出參數和數組型參數。

值參數:值拷貝的形式,在方法中更改不會保留更改的值(局部變量)。

引用參數:保留更改的值的。

輸出參數:在方法中進行初始化的參數。

數組型參數:把輸入的數值按照規則傳入一個建立的數組中。

public class Sample
{
    int m_field;//這個就是字段
    public int field//這個是屬性,property
    {
        get;set;
    }
    static void Function(ParaType ptr1,ref ParaType ptr2,out ParaType ptr3)
    {
        //ptr1就是值參數
        //ptr2就是引用參數
        //ptr3就是輸出參數
    }
    static void FunctionParam(Params object[] ptr4)
    {
        //ptr4就是數組型參數
    }
}
static void main()
{
    int i,j,k;
    i=j=0;//這兩種需要先進行初始化,out的可以不用
    Function(i,ref j,out k);
    FunctionParam("a","b","c");
}
           

attribute

https://blog.csdn.net/xiaouncle/article/details/70216951

https://blog.csdn.net/FantasiaX/article/details/1636913?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

https://blog.csdn.net/xiaouncle/article/details/70229119

attribute可以了解成自定義修飾符。淺顯的了解,大概是類似于一個給類或變量或者屬性啊什麼一個标簽,用來給看/調試代碼的人區分這些東西,便于維護整理調試代碼。如果後面用到了會回來補充。

我看不懂,我人傻了。= =

3.修飾符和辨別符和關鍵字的差別?

修飾符

修飾符都屬于關鍵字。修飾符是指用于聲明的那些關鍵字。(public那些)

https://docs.microsoft.com/zh-cn/previous-versions/6tcf2h8w%28v%3dvs.120%29

辨別符

寫代碼時自己起的那些名字。

關鍵字

https://docs.microsoft.com/zh-cn/previous-versions/x53a06bb(v=vs.120)

關鍵字是指不能被用作辨別符的已經預定義了的辨別符。(if啊等等一切)

4.事件是什麼?事件處理函數是什麼?事件參數是什麼?

事件就了解成使用者的一個操作。

事件處理函數就是處理事件的函數,用于處理使用者操作的。實作線程間通信的。

以後用到事件了再回來補充。

5.as怎麼使用?

as是用來進行強制類型轉換的。我感覺用在子類基類之間?

Type1 a = new Type2();
Type2 newValue = (Type2)a;//不安全的強制類型轉換

Type1 a = new Type2();
Type2 newValue = a as Type2;//安全,不成功會傳回NULL

------以下是錯誤用法------

Type1 a = new Type1();
Type2 newValue = a as Type2;//不能進行類型之間的轉化,需要強制轉換

Type1 a = 11;
Type2 newValue = a as Type2;//值類型不能使用
           

強制轉換就配合is使用,具體的就不寫了。

6.對象生存期是?

靜态生存期:與程式運作期相同。

動态生存期:誕生于聲明點,結束于塊結束時。

把不再引用的字段設定為NULL便于回收記憶體。

7.Struct和Class怎麼選擇?

https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/choosing-between-class-and-struct

  • 在大多數的情況下,都應該選擇類,除非滿足以下情況,才考慮選擇結構體:
  • 類型具有基元類型的行為
  • 類型不需要從其它任何類型繼承
  • 類型也不會派生出任何其它類型
  • 類型的執行個體較小(約為16位元組或者更小)
  • 類型的執行個體較大,但是不作為方法的參數傳遞,也不作為方法的傳回值。

8.非托管資源是指什麼?

“非托管資源:就是非.NET平台架構的資源,比如,連接配接資料庫,操作Office等.NET裡的平台互操作都是非托管資源。這些資源用完都要立即釋放掉的。”

 9.裝箱、拆箱是什麼?

裝箱:把值類型轉換成引用類型。

拆箱:把引用類型轉換成值類型。

int i=0;
System.Object obj=i;
Console.WriteLine(i+","+(int)obj);
           

https://www.cnblogs.com/zjtao/p/11345442.html

上面的代碼,三次裝箱,一次拆箱。

對性能的影響?

引用類型增加會增加托管堆的壓力、垃圾回收的次數。

值類型過多會有損應用程式的性能。

是以大對象避免使用值類型。

裝箱操作會對應用程式産生消耗。

避免過多的裝箱操作。

性能這塊也弄不太明白。

10.方法重載和預設參數?

預設參數就是在方法中給了預設值的參數。

是以如果不想使用預設參數,就重載兩個方法,一個包含該參數,一個不包含。

11.值語義、值類型、基類型?

https://www.cnblogs.com/ly8838/p/3929025.html

https://blog.csdn.net/weixin_41143631/article/details/87710751

值語義是指對象的拷貝與原對象無關,可以彼此獨立改變互不影響。

 值類型:第一個問題裡有提及,感覺就是是值語義的類型就是值類型。

 基元類型:編譯器直接支援的類型。

https://www.cnblogs.com/ASPNET2008/archive/2009/06/14/1503041.html

https://www.cnblogs.com/ITusk/p/7105148.html

12.類的邏輯資料成員是指什麼?

邏輯資料成員就是類的邏輯屬性。比如歐盟-國家這樣的。

13.方法和屬性怎麼選擇?

問題2裡有。個人了解就是屬性是為了改變類裡面的私有字段,方法是針對整個類的操作。

14.構造器?

就是構造函數。

15.替換簽名是什麼?

不知道,沒查到。

剩下的部分

異常、事件、委托、事件處理器、Stringbuilder與String、強類型、寫死、語義不同的值、域、空引用