2010-11-23

自訂PropertyGrid視窗屬性

今天很意外的看到這篇文章
[C#.NET][VB.NET] 自訂控制項的顯示視窗屬性 /User Control of Properties(一)

原本是想查詢[是否能在設計屬性的時候,利用Attribute來設計預設值]
這部分有點像是之前在設計自訂的ConfigurationSection時,
可以設定自己的預設值。
不過,後來問林大哥後,好像是沒有這樣的東西?
我先把這個過程記錄下來,留給以後參考。

另外前面提到這篇文章,之前也看過有機會用到時可以參考。XD

2010-11-18

c#委派寫法(整理心得筆記)

今天一早比較有空的時候,邊吃著早餐邊拜讀Huan-Lian大大寫的這篇文章
Huan-Lin 學習筆記: C# 筆記:重訪委派-從 C# 1.0 到 2.0 到 3.0
(迷之音:早餐配這種很枯燥的東西,不怕沒胃口嗎?XD)
不過還好Huan-Lian大大寫的滿淺顯易懂的,倒是很有趣的帶過整個委派寫法的演變。

先來簡單做個心得筆記,怕自己以後會忘掉,先記錄下來。
首先設計一個資料物件(MyObject)供範例使用。
image
C# 1.0 委派寫法
image
image
 

C# 2.0 委派寫法
(1) Delegate新寫法
 image 
另外甚至於可以直接這樣寫-> objCollection.Find(FindObject2)即可
image

(2) Anonymous 寫法
image
image 

C#3.0 委派寫法(這部分就完全是看網頁上說明了!!)
image 可以簡化寫成如下表示
省略定義targetObj型態和return
 image

看完以上的寫法後,我在想若可以的話以後會盡量使用Lambda寫法。
簡單記錄下,提供以後參考。

2010-11-14

解決專案中不同Naming的問題

問題:
專案遇到一個滿棘手的問題,原本使用者需求希望我們產生的表單編號是(合約編號-四碼流水號)
假設合約編號是XR-332211,那所產生的表單單號為XR-332211-0001,這是原先的需求。

但是需求總是會變動的,這次使用者又覺得說這樣的表單單號太長,因為受限於一些環境需求,
而我們被迫要變動我們的程式。。。

若我們根據新需求來變動,那接下來問題又來了,若是現在這個專案是這樣,另外一個專案又需要另外的命名規則時,
我們是不是又要變動程式碼?這對我們程式設計師來說,最不希望看到的現象[不停的在修改我們的程式]。

解決方案:
跟林大哥討論完之後,他給我一個架構如下
image
我們在程式裡面針對Naming Rule設計一個合約(INaming),一個很簡單的GetName Method
image 
接下來,我們實際設計一個Naming的物件(NC6Naming),並實作INaming的GetName
image 

在這個物件中,建構式變成很重要的一個角色,
因為這裡需要別的地方提供所有可以供Naming的資料,
(此例中SpoolBaseObj有許多可以提供Naming的資料)

然後在ClientAPI中利用Reflect來操作IName取得表單命名字串。
image 
這樣若往後需要不同的專案時,可以再新增Naming的物件,
只要在ClientAPI中,告訴它要使用的是哪一個Naming物件,就可以不用到修改原始程式碼,
又能接受這樣的需求變更。

一個Class可以同時擁有兩個以上相同的Property或Method

看到這個標題,應該有很多人會感到很疑惑??

(蝦米??一個Class可以有兩個以上相同的Property或Method,怎麼可能?)

其實,若是操作Interface的話,這就不成問題

首先設計兩個不同的Interface(IA、IB),但是設計相同的屬性與Method

image 

再來設計一個Class(TestInterface),並實作IA、IB

image

接下來實際操作這個物件,但在操作的時候請轉型成IA or IB操作

這樣就可以同一物件兩個以上相同屬性的操作

image

結果

image 

這要使用在真正的設計中,其實還沒有頭緒??該用在哪?

我在想若是要使用來擴充新Method時,

但是卻遇到與之前所設計的Method有相同名稱時,可以借由這個方式另外操作??

(Method無法被Override的時候,只是那既然這樣到不如就設計一個新的Method就好?)

或許以後會有新的看法,先記錄下來。