1. 程式人生 > WINDOWS開發 >C#+VS開發PC端應用

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
public class AgreementFacadeClientImpl implements AgreementFacadeClient {
....
}

C#引入attribute作為特性,如

[Export(typeof(IPayModule))]
[Export(typeof(IModule))]
public class PayModule : IModule,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新語法