C#+VS開發PC端應用
需要使用modbus rtu,如何安裝第三方包?
Tools->Extention Manager->搜尋NuGet Package Manager->安裝->重啟vs
vs專案中找到References->右鍵選擇Manage NuGet packages...->搜尋NModbus4->安裝
VS2010老掉牙了,很多包都不支援,建議換VS2015及以上版本
如果發現外掛無法解除安裝,請以管理員身份執行vs
VS2020多個類中有Main方法會報錯?
右鍵專案名->Properties->Startup objects中選擇要測試的類
Win form元件佈局問題:
用好anchor和dock
anchor和dock水火不容,後設置的屬性會覆蓋掉先設定的屬性
anchor:錨點,像釘子一樣釘住上下左右,預設左上,試過全釘住,和預設一樣
dock:停靠,和錨點最大的區別是會填充
元件居中:好難,table layout容器可以解決,三行三列,元件放中間
C#程式設計風格
建議函式名首字母大寫
VS2010快捷鍵
格式化:CTL+A,K,F
註釋:CTL+K,C
取消註釋:CTL+K,U
生成屬性:CTL+R,E
C#和java語法差異
轉自:https://www.cnblogs.com/caizl/p/9338343.html
Java |
C# |
||
訪問修飾符 | public |
修飾類、介面、變數、方法。 對所有類可見。 |
修飾類、介面、變數、方法。 對所有類可見。 |
internal | 無。 |
修飾類、介面、變數、方法。 類,介面的預設訪問修飾符。 同一個程式集的物件可見。 |
|
protected | 子類可見。 | 子類可見。 | |
private | 類內部可見。 |
變數,方法的預設訪問修飾符 類內部可見。 |
|
default |
類、介面、變數、方法的預設修飾符。 同一包內可見。 |
無。 | |
基本型別 |
基本型別,無方法可呼叫。 作為區域性變數時,儲存與棧。作為欄位時,跟隨於例項。 |
值型別,繼承object,具有ToString()等方法。 作為區域性變數時,儲存與棧。作為欄位時,跟隨於例項。 |
|
布林值 | boolean | bool | |
整形 | short,int,long | short,int,long | |
浮點數 | float,double | float,double | |
可空基本型別 | 例如:Integer是引用型別,Integer是int的包裝類。 | 例如:int?其實是Nullable<int>的語法糖,而Nullable<int>依然是值型別。 | |
布林值 | Boolean | bool? | |
整形 | Short,Integer,Long | short?,int?,long? | |
浮點數 | Float,Double | float?,double? | |
高精度數值型別 | BigDecimal | decimal? | |
原始檔組織 | 匯入 | 使用包的概念,關鍵字import匯入 | 使用名稱空間的概念,關鍵字using匯入 |
類檔案 |
原始檔名要和Public類名保持一致, 最多存在一個Public修飾的類, 檔名字尾是.java |
沒有java中的限制, 檔名字尾是.cs |
|
列舉 | 列舉 |
關鍵字enum, 引用型別, 和class差不多,可以有欄位和方法, 可以新增私有建構函式 |
關鍵字enum, 值型別, 預設繼承int,可以繼承其他值型別 |
常量 | 常量 | 關鍵字final修飾變數,欄位,定義時賦值 |
關鍵字const修飾變數,欄位,定義時賦值 關鍵字readonly修飾,可以在建構函式中賦值 |
密封 | 密封 | 關鍵字final修飾方法,類,表示不可繼承,不可重寫 | 關鍵字sealed修飾方法,類,表示不可繼承,不可重寫 |
屬性 | 屬性 |
只有欄位概念, 一般情況下是要定義欄位XX,方法getXX()和setXX() |
C#引入屬性概念,簡化了操作, 只需要定義XX{get;set;} |
判斷型別 | 判斷型別 | Instanceof | is |
鎖 | 鎖 | Synchronized | Lock |
介面 | 介面 |
關鍵字implements, 使用註解@Override |
和繼承類一樣,使用符號: 實現類中的方法,不需要使用override關鍵字, 一般命名需要用大寫字母I開頭 |
類 | 抽象類 |
abstract 使用註解@Override |
abstract, 重寫方法需要使用override關鍵字 |
分部類 |
無 |
partial 可以將分佈在不同檔案,而在相同名稱空間下,相同名稱並用partial標識的類合併,多用於wpf,winform框架上。 |
|
匿名類 |
如Runnable hello =new Runnable() {publicvoidrun(){ System.out.println("hello");}}; 簡化了定義子類的步驟。 |
無。類似的場景基本都是用委託的 |
|
內部類 |
在new的使用上,內部類要和外部類關聯起來 |
在new的使用上,內部類和外部類用法無區別 |
|
匿名方法 | 匿名方法 |
無。 |
使用delegate宣告匿名方法, 如 delegate(intx) { Console.WriteLine("Anonymous Method: {0}",x); }; |
虛擬方法 | 虛擬方法 |
預設都是虛擬方法 |
virtual標識虛擬方法,子類用override重寫 |
靜態 | 靜態類 | 使用關鍵字static |
使用關鍵字static, 可以有靜態建構函式, |
傳參 | 引用傳遞 | 無 |
在方法引數加上ref,out,使引數按引用傳遞 即方法內改變引數的值,也會影響到方法外的值 |
不定長引數 |
如int... |
如params int[] |
|
流程控制 | 迴圈 |
關鍵字for有兩種用法 for(初始化; 布林表示式; 更新) { //程式碼語句 } for(宣告語句 : 表示式){ //程式碼句子 } |
分別為for和foreach
for(初始化; 布林表示式; 更新) { //程式碼語句 } foreach (宣告語句 in 表示式) |
字元 | 字元 |
String,引用型別, 需要使用方法equals比較是否相等 |
string,引用型別, 但用法和值型別類似,可以直接用==比較是否相等, 實現原理就是微軟過載了string的==運算子 |
委託 | 委託 | 無。 |
使用關鍵字Delegate宣告,是存有對某個方法的引用的一種引用型別。 使用+使用委託的多播。 |
泛型 | 泛型 |
<T>宣告泛型, T只能是引用型別, 可以用extends和super限制T的型別, <?> 表示通配, 實際上是假泛型。 |
<T>宣告泛型, T可以是引用型別也可以是值型別 使用:表示泛型約束,如T:new()表示T必須要有無參建構函式, 真正的泛型。 |
註解與特性 | 註解與特性 |
使用@宣告註解,如 @Service |
C#引入attribute作為特性,如 [Export(typeof(IPayModule))] { ...... } |
索引器 | 索引器 | 無。 | 定義了索引器,就可以使用[]取值。 |
運算子過載 | 運算子過載 | 無。 | 可以對+,-,==等內建的執行符過載,string的==比較符就是運算子過載的結果。 |
集合 | 列表 | List是介面,ArrayList才是實現類 | IList是介面,List是實現類 |
字典 | Map | Dictionary | |
集合處理 |
流式api, 物件.stream().filter(x->x.getCount()>0).collect(Collectors.toList()) |
Linq 物件.Where(x=>x.Count>0).ToList() 使用上方便很多 |
|
lambda | lambda |
()->{}, 入參型別為函式式介面, 實質上lambda表示式會在編譯階段被轉換為匿名內部類 |
()=>{}, 入參型別為委託delegate |
方法引用 | 類::例項方法 類::靜態方法 物件::例項方法 |
類.方法 |
|
擴充套件方法 | 擴充套件方法 | 無。要實現類似功能,要編寫Util類。 | 擴充套件方法是定義在靜態類的靜態方法,入參中的this代表使用的物件,是單繼承的一種補充。 |
命名規範 | 命名規範 |
介面命名和類命名一樣,如Module。 私有欄位小寫字母開頭,如test。 方法命名是小寫字母開頭,如getSomeThing() |
介面命名開頭要加大寫字母I,如IModule。 私有欄位開頭要加_,如_test。 方法命名都是單詞首字母大寫,如GetSomeThing() |
.Net 6.0新語法