學習雜記

1.C#中調用C++函數的注意事項
第一步:定義DLL
[DllImport("JZTDevDll.dll", EntryPoint = "FPITemplate")]
public static extern int FPITemplate(int nPort,ref byte _psMB,ref int lpLength);
第二步:調用
byte[] _psMB = new byte[513];
int _lpLength = _psMB.Length - 1;
int i = FPITemplate(FPIDevDetect(),ref _psMB[0],ref _lpLength);
2.領域對象設計(參考CSDN)
又稱,概念模型、領域對象模型、分析對象模型。
領域模型是對領域內的概念類或實現世界中對象的可視化表示。
其專一於分析問題領域自己,發掘重要的業務領域概念,並創建業務領域概念之間的關係。
什麼是領域模型?
其業務通常包括三個部分:
(1)、操做者(角色)
(2)、系統爲操做者提供的行爲
(3)、操做對象
其中的操做對象就是領域模型的來源。在進行需求分析時,領域模型來自於業務描述中的名詞以及對名詞的抽象。
固然描述業務的名詞不都是模型,有多是模型的一個屬性,也多是角色、或者是和業務可有可無的描述。在業務描述中有些關聯名詞描述的則是模型之間的關係。
一個描述業務的名詞成爲領域模型,至少必背兩點:
要麼是業務中確實存在實體、要麼是業務實體的提煉(抽象)
3.IOC
IOC, Inversion of Control 是一個重要的面向對象編程法則,用於消減計算機程序的耦合問題。
又被稱爲依賴注入——Dependency Injection 簡稱DI。
4.常量
常量分爲靜態常量、動態常量兩種
靜態常量:
靜態常量是指編譯器在編譯時對常量進行解析,並將常量的值替換成初始化的那個值。
動態常量:
動態常量的值是在容許時才獲取的,編譯器編譯期間將其標示爲只讀常量,而不用常量的值代替,這種常量沒必要再生命時就初始化,能夠延遲到構造函數中進行初始化。
5.const和readonly的區別?
Const修飾的常量屬於靜態常量,必須在聲明時初始化;Readonly修飾的常量爲動態常量;
const修飾的常量在編譯期間就被解析,即常量值被替換成初始化的值。
Const修飾的常量能夠聲明在類中也能夠在函數體內;Readonly修飾的常量只能聲明在類自己;
Const修飾的常量默認爲靜態的;Readonly使用靜態就必須顯示聲明;
6.string.Empty、」」、null
string.Empty不分配存儲空間
「」分配一個長度爲空的存儲空間
string.Empty、null都表示空字符串。
例如:
string str1 = string.Empty;
string str2=null;
str1,表示一個空字符串,但在內存中有準確的指向;
string str2=null;只是定義了一個string類的引用,str2沒有任何指向(所以在使用前若是不實例化的話,將報錯)。
所以通常建議優先使用string.Empty。編程

SOA
SOA, Service Oriented Architecture,簡單的被理解爲,面向服務的框架。
可是,更多的被認爲,一整套新的分佈式軟件系統構造方法和環境,其包含:運行環境、編程模型、架構風格和相關方法論等。其涵蓋服務的整個生命週期:建模—開發—整合—部署—運行—管理。
簡介:
是一個組件模型,其將應用程序不一樣的功能單元(稱爲服務)經過這些服務之間定義良好的接口和契約組織聯繫起來。接口是採用中立的方式進行定義的,其應該獨立於實現服務的硬件平臺、操做系統和編程語言。這使得構建在各類系統中的服務可使用一種統一和通用的方式進行交互。
SO (Service-Oriented Architecture),面向服務架構,它能夠根據需求經過網絡對鬆散耦合的粗粒度應用組件進行分佈式部署、組合和使用。服務層是SOA的基礎,能夠直接被應用調用,從而有效控制系統中與軟件代理交互的人爲依賴性。
SOA是一種粗粒度、鬆耦合服務架構,服務之間經過簡單、精肯定義接口進行通信,不涉及底層編程接口和通信模型。SOA能夠看做是B/S模型、XML/Web Service技術以後的天然延伸。
SOA將可以幫助軟件工程師們站在一個新的高度理解企業級架構中的各類組件的開發、部署形式,它將幫助企業系統架構者以更迅速、更可靠、更具重用性架構整個業務系統。較之以往,以SOA架構的系統可以更加從容地面對業務的急劇變化。
基本特徵:
SOA的實施具備幾個鮮明的基本特徵。實施SOA的關鍵目標是實現企業IT資產的最大化做用。要實現這一目標,就要在實施SOA的過程當中牢記如下特徵:
可從企業外部訪問
隨時可用
粗粒度的服務接口分級
鬆散耦合
可重用的服務
服務接口設計管理
標準化的服務接口
支持各類消息模式
精肯定義的服務契約 
SOA服務具備平臺獨立的自我描述XML文檔。網絡

10.Lambda表達式
Lambda表達式是一個匿名函數,其能夠包含表達式和語句,而且能夠用於建立
委託或表達式目錄樹類型。
全部的Lambda表達式都使用Lambda 運算符=>,該運算符讀爲「goes to」。
該Lambda運算符的左邊是輸入參數(若是有),右邊包含表達式或語句塊。
Lambda 表達式 x => x * x 讀做「x goes to x times x」。能夠將此表
達式分配給委託類型,以下所示:
delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate⑸; //j = 25多線程

11.多線程調用帶參數的方法
*****************調用一個參數的函數****************
#region 執行帶一個參數的多線程
Thread mythread = new Thread(new ParameterizedThreadStart(Calculate));
mythread.IsBackground = true;
mythread.Start(500);
#endregion架構

//帶一個參數的委託函數
private void Calculate(object Max)
{
int max = (int)Max;
Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = 0; i < max; i++)
{
Thread.Sleep(5);
}
stopwatch.Stop();
long lSearchTime = stopwatch.ElapsedMilliseconds;
MessageBox.Show(lSearchTime.ToString() + "毫秒");
}app

*****************調用多個參數的函數****************
方式一:類對象法
定義一個類,將要傳的參數設置爲類的屬性,而後將參數值賦值給類的屬性
將類做爲一個參數進行傳達。
EG:
class MyClass
{
public int Max { get; set; }
public int Min { get; set; }
}
#region 第一種方式:執行帶多個參數的多線程
MyClass model = new MyClass();
model.Max = 500;
model.Min = 0;
Thread mythread1 = new Thread(new ParameterizedThreadStart(CalculateTwo));
mythread1.IsBackground = true;
mythread1.Start(model);
#endregion
private void CalculateTwo(object Myclass) //帶多個參數的委託函數
{
MyClass model = (MyClass)Myclass;
Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = model.Min; i < model.Max; i++)
{
Thread.Sleep(5);
}
stopwatch.Stop();
long lSearchTime = stopwatch.ElapsedMilliseconds;
MessageBox.Show(lSearchTime.ToString() + "毫秒");
}框架

方式二:lambda表達式的方式,簡單方便
EG:
#region 第二種方式:執行帶多個參數的多線程
Thread mythread2 = new Thread(() => CalculateThree(500, 0));
mythread2.IsBackground = true; //設置為後臺線程,程式關閉後進程也關閉,若是不設置true,則程式關閉,此線程還在內存,不會關閉
mythread2.Start();
#endregion
private void CalculateThree(int Max,int Min) //帶多個參數的委託函數
{
Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = Min; i < Max; i++)
{
Thread.Sleep(5);
}
stopwatch.Stop();
long lSearchTime = stopwatch.ElapsedMilliseconds;
MessageBox.Show(lSearchTime.ToString() + "毫秒");
}
12.引用類型、值類型
NET Framework 中的全部類型不是值類型就是引用類型
值類型是使用對象實際值來表示對象的數據類型。若是向一個變量分配值類型的實例,則該變量將被賦以該值的全新副本。
引用類型是使用對對象實際值的引用(相似於指針)來表示對象的數據類型。若是爲某個變量分配一個引用類型,則該變量將引用(或指向)原始值。不建立任何副本編程語言

 13.對象集合初始化分佈式

對象初始化==》函數

User user = new User{id="1",name="kunkun",age=28};操作系統

對象集合初始化==》

List<User > list = new List<User >() { new User () { Name = "Tom", Age = 1 }, new User () { Name = "Lucy", Age = 3 } };

 

14.FileInfo f = new FileInfo(c);

string aav = f.Directory.Parent.Parent.FullName;

 

15.日期判斷大小

DateTime btnDate = DateTime.Parse(appointDate); DateTime today = DateTime.Parse(DateTime.Now.ToShortDateString()); if (btnDate > today) return 0; if (DateTime.Now.Date > DateTime.Parse(appointDate))

相關文章
相關標籤/搜索