之前學習隻求了解,從來不記這些專業詞彙,對代碼也沒有優化的想法。現在就回來補課來了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、強類型、寫死、語義不同的值、域、空引用