台灣最大程式設計社群網站
線上人數
1076
 
會員總數:245985
討論主題:189565
歡迎您免費加入會員
討論區列表 >> VB.NET >> 屬性可以有多種設定方法嗎?
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
屬性可以有多種設定方法嗎?
價值 : 50 QP  點閱數:2662 回應數:46
樓主

city
初學者
230 43
1733 231
發送站內信

請問各位前輩們:


Class學生 裡面有個Name屬性

在一個專案中(或不同專案中) 可能有不同的情境 需要不同設定Name的方法
例如:
1.直接設定Name
2.Name=TextBox1的文字
3.Name=InputBox 使用者輸入的文字

如下:



以上
會將多種設定Name屬性的方法 放在一個Class的原因是:
因為一個專案中 或是不同專案中 會有多種情境 需要不同的設定方法
如果只有一種設定方法 會不敷使用

當然 也可以依照不同需求 量身訂做不同的Class
如下:



實際測試 不管是將多種設定方法放一個Class 或是分成不同Class都是可行的

是想問各位大大們:
1.會建議將多種設定屬性的方法 放在一個Class裡面嗎?
(這樣的優點是:一個Class可以供多種不同情境使用)(而且Age屬性 TelePhone屬性也只需要一份就可以了)

2.還是各位大大覺得量身訂做Class比較好?

謝謝~~

搜尋相關Tags的文章: [ 屬性 ] , [ 多種 ] , [ 設定 ] , [ 方法 ] ,
本篇文章發表於2017-11-19 12:10
1樓
回應

羅伯斯
檢舉此回應
請問:
2.Name=TextBox1的文字
3.Name=InputBox 使用者輸入的文字
兩者的方式差別之處在那?兩者都是可讓使用者輸入文字,

TextBox1物件,會固定在畫面上,使用者可以隨時可以看到它,通常用在固定的資料輸入及顯示
InputBox物件,是彈跳視窗,必須在特定狀況下,使用者才能看到它,而且當使用者輸入完文字後,它會消失,常用於輸入少量的資料,如條件範圍...等
兩個物件,你只能選一個來要求使用者輸入文字,不可能會要使用者,對相同的資料,做兩次輸入吧,若真如此,使用者不對這個程式,打槍就怪了

本篇文章回覆於2017-11-19 18:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

city
檢舉此回應
To:羅伯斯

應該是說:每個元件區塊都需要設定一個自己的Name屬性



想說是不是Class學生裡面 直接包含3種Name屬性的設定方式
本篇文章回覆於2017-11-19 18:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

city
檢舉此回應
#0範例中

Class學生裡面 之所以會有多種設定Name屬性方式的原因是:

為了應付多種不同情境 呼叫Class學生

可能有些情境呼叫Class學生 設定Name屬性是:ClassStudent.Name="City"
可能有些情境呼叫Class學生 設定Name屬性是:ClassStudent.Name=TextBox1.Text
可能有些情境呼叫Class學生 設定Name屬性是:ClassStudent.Name=InputBox的文字


當然 這就是我的問題:這種方式OK嗎?
還是依每種情境來量身訂做專屬的Class比較好?
本篇文章回覆於2017-11-19 19:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

羅伯斯
檢舉此回應
樓主的意思是指設計一個通用型的元件。而名稱由使用者來設定?
若是的話,那倒是少見的很,實務上好像也不會如此設定
試想,若元件名稱由使用者自行設定,沒有一個統一的命名
若一個多使用者的系統的某個元件,每個使用者都有自己的名稱時
系統運作時,要如何去分辨某名稱,指的是該元件

而且就你的程式碼看,它沒有任何的物件屬性的描述
只是要求使用者輸入一個叫做名稱的文字串,其他啥事都沒做
左看右看,它啥都不是,為何算是個物件?

個人有個疑問,即樓主知道屬性的意義嗎?
它是用於描述物件的外觀及行為特性,詳情請參考以下連結:

http://learn.hshs.tyc.edu.tw/ischool/public/resource_view/open.php?file=7465168598a5bad51b136a4889fefd6c.pdf

https://msdn.microsoft.com/zh-tw/library/ms172576(v=vs.90).aspx




本篇文章回覆於2017-11-19 22:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
不錯的參考

羅伯斯
檢舉此回應
另外個人覺得樓主好像又走偏了,為何會想這麼多?
對於一個單純的要使用者輸入一個文字串的動作
用何種方式要求使用者輸入,考量的應該是使用者操作的便捷性
而不是如何的包羅萬象,可以適應任何狀況

對於解決需求,要看需求點是啥,儘可能的單純化
不要想包羅萬象,那只會製造更多的麻煩,來困擾自己

本篇文章回覆於2017-11-19 23:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

誰是誰
檢舉此回應
兩種方法都只會搞死自己。
一個被稱為 Student 的 Class,聽起來就應該是處理 "學生" 相關的事情。
學生有個 string type 的 property 被稱為 Name。那就是把字串指派給 Name 的 setter 就好了。

打個比方吧,你去銀行的存款機存錢,只要是是他能接受的新台幣 (通常是紙鈔),就一直餵進去就對了,存款機難道還要區分你的錢是怎麼來的嗎 ?

你的第一種就是需要區分錢的來源不同,就要有一個不同塞錢接口的提款機。
第二種就是錢的來源不同,需要找不同的提款機。

光用想的就知道有多荒謬。



本篇文章回覆於2017-11-20 01:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
是想問各位大大們:
1.會建議將多種設定屬性的方法 放在一個Class裡面嗎?
會,但不一定是你所想像中的做法。
一般來說,有時class太多時。我會創造一個新的class來做核心class
而這核心的class就是你所謂的多種結合的方式。
但各子class則是還是依照不同的需求各自設計。

而主核心class,只將目前專案需要的子class結合進來處理而已。
而其屬性及相關有可能會共用的設定值。會依其需求來決定是否要放在主核心的class內。


2.還是各位大大覺得量身訂做Class比較好?
還是那一句老話,沒有好跟不好的問題,只有適合與不適合的問題。


上面兩個大大已經跟你說明過了,我就不再多說什麼了。
我一樣對你的感覺,也有如上面兩位大大說的一樣。
你所想的東西,在實務上當然可以做到。只是實用效能不大。維護又麻煩。
我認為你目前在想的東西,因該就是我說的第一點的做法。再用個主核心來結合需要的功能。
這樣在更換專案時就會比較容易方便。

當然這是我猜測的。

ps:我怎麼感覺你好像一直是理論派啊~~~
你該說說一下,這樣子的用法可以在何種場合上能應用好了。
雖然說有理論也是一個不錯的想法。

想當初我自已要自創sql中文搜尋的方式,也的確很多人跟我說我的理念是錯誤的。
做不出來的,一定會卡或是效能不好的。
但我那時也是一直有堅持自已的想法跟理念。花費了將近7個多月研究。
終於做出我理想中的中文搜尋。

只是,我跟你不同的地方是,我是有一個課題來轉理論。
你至少也先決定好一個課題。而不是先做理論,再來決定這個理論能應用到哪個課題上才對吧。
本篇文章回覆於2017-11-20 11:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

city
檢舉此回應
回各位前輩:

Class學生 是個簡化過後的範例
也就是在實際寫程式的過程中遇到的問題 我把問題簡化 並把重點抽離 做出了Class學生的範例
不過問題的重點還是保留


看了[羅伯斯]與[誰是誰]的建議後
我發現問題在於:
我原本的Class學生 裡面已經包含了處理字串的功能
而如果照兩位大大的理論 應該是先處理完字串 再丟進Class學生


[浩瀚星空]大大說的主核心Class 我也有試著做過
不過這樣主核心Class裡面需要的參數就會很多

如果是Form裡面先設定好子Class 再把子Class傳給主核心Class 這也可以

不過我在想Form裡面的元件區塊(例如:Button1_Click)不就也等於是個小型的主核心Class

不過主核心Class可以在不同專案使用 還是跟元件區塊有差異



回到問題:

說個實際遇到的狀況好了:

[在Button上按右鍵 會跳出ContextMenuStrip 如果按下"設定文字"按鈕 會跳出InputBox要使用者輸入文字 如果使用者有輸入文字 那Button的文字就是使用者輸入的文字 並將使用者輸入的文字存入Excel]

以程序導向來說 步驟大約是:

1.除錯(Excel檔案不存在)
2.取得文字(文字=InputBox使用者輸入的文字)
3.除錯(使用者沒輸入文字)
4.取得Button(Button=ContextMenuStrip的來源)
5.取得數字(數字=Button名稱裡的數字)(例如:A1 取得1)(數字是供將來存入Excel時 Row的索引)
6.Button文字=使用者輸入的文字
7.將使用者輸入的文字存入Excel

我想把以上的內容 擷取成Class 供以後不同的專案使用

因此我建立了兩個Class
一個Class可以設定Button文字
一個Class是將文字存入Excel

設定Button文字的Class內容如下:
私有屬性(Button)
私有屬性(Text)
公開建構式(屬性的預設值)
公開方法(取得Button)(使用者須輸入ContextMenuStrip)
公開方法(取得Text)(使用者須輸入Form InputBox的內容)
公開方法(Button文字=Text)
私有方法(除錯)(檢查Button及Text是否空白)

存入Excel的Class就先略過了

以上執行起來是OK的

然後我又需要:
[在Button上按右鍵 會跳出ContextMenuStrip 如果按下"清空文字"按鈕 那Button的文字就被清空 並清空Excel]
步驟:
1.除錯(Excel檔案不存在)
2.取得Button(Button=ContextMenuStrip的來源)
3.取得數字(數字=Button名稱裡的數字)
4.Button文字=Nothing
5.清空Excel(將Nothing存入Excel)

我就套用了上面的Class設定Button文字

結果發現部分會出現錯誤 需要修改些東西 因此我就將屬性變成公開的 直接給Text屬性值
變成:
公開屬性(Button)
公開屬性(Text)
公開建構式(屬性的預設值)
公開方法(取得Button)(使用者須輸入ContextMenuStrip)
公開方法(取得Text)(使用者須輸入Form InputBox的內容)
公開方法(Button文字=Text)
私有方法(除錯)(檢查Button及Text是否空白)

這個Class變得有多種輸入Button Text的方法

當然 如果以[羅伯斯]與[誰是誰]的理論來看
設定Button Text的方法要被拿掉
直接將Button Text先設定好 再丟入Class

這個Class有可能就瓦解掉了(沒有存在的意義了)

或是變成了:
公開屬性(Button)
公開屬性(Text)
公開方法(Button文字=Text)
私有方法(除錯)(檢查Button及Text是否空白)

這麼簡單的一個Class
本篇文章回覆於2017-11-20 13:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

羅伯斯
檢舉此回應
先不論你設計的Class有多少特異功能
只問樓主你整套系統,是只給單一使用者用的,還是同時供多使用者連線用的?
若是前者,元件的名稱,只要使用者高興,叫啥都行
若是後者,同一個元件,不同的使用者有不同的名稱
那使用者之間的資料,若有相互引用交流的情況時
請樓主想像一下,系統那時會是個啥樣的情境?

個人預想的情境應該是以下兩種狀況:
1. 使用者彼此之間「雞同鴨講」,無法引用交流對方的資料,一個同時可供多使用的系統,變成單機版的系統
2. 因系統無法分辨使用者的名稱,指的是那個元件,造成整個系統崩潰,輕則當機,重則連使用者建立的資料,一併毁滅
本篇文章回覆於2017-11-20 16:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

city
檢舉此回應
To:羅伯斯

是自己在用的 簡單的單機版程式

不知道大大說的[元件] 指的是?

我說的[元件]指的是從工具箱拉出來的物件 像Button1 TextBox1 ...
而[元件區塊]指的是Button1_Click內的程式碼

不知道我跟大大指的[元件]是否一樣的?


大大所說的[供多使用者連線用的] 這我倒是沒碰過 目前都是寫自己用的

而如果是多人要使用這個Class的話...這我倒是沒想到...
也許..這個Class就要簡單到只有一個功能...介面則是公開的屬性...需要先把變數整理好再丟進Class裡...Maybe...
本篇文章回覆於2017-11-20 18:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

羅伯斯
檢舉此回應
TO:#10
樓主指的元件,及元件區塊個人了解

所不解的是樓主指的Class學生 裡面有個Name屬性,到底是啥?
它是一個物件的名稱?還是一個資料欄的值?或是一個參數值?
以樓主用屬性界定它,很容易讓人誤解,是個物件名稱
但細看之下,它其實較像資料欄的值,或是一個參數值

也很難理解樓主為何要弄出多種要求使用者,輸入文字串的方式
就不能簡單一點的以一種方式來要求使用者輸入文字串?
除非樓主是應委託人的要求,不然何苦「畫蛇添足」的自找麻煩
當然啦!若是樓主是基於自我練習之目的,想試試多種方式,則另當別論

個人在#5曾提到
「用何種方式要求使用者輸入,考量的應該是使用者操作的便捷性,而不是如何的包羅萬象,可以適應任何狀況」
樓主理解乎?

TextBox,大多用於要使用者一次輸入多項資料時
InputBox,則主要用於使用者輸入單項資料時
兩者的使用時機,不並太相同
以樓主的程式需要使用者一次輸入多項資料,為何不只用TextBox,非要加入InputBox不可
樓主以使用者的立場試想一下,用那個一方式,會較為便捷,答案自然就出現了








本篇文章回覆於2017-11-20 22:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

誰是誰
檢舉此回應
把簡單的事情複雜化。何必呢?
本篇文章回覆於2017-11-21 08:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

city
檢舉此回應
To:羅伯斯

Name=學生的名字

Name屬性會讓使用者疑惑:這是物件名稱? 還是參數值? 還是???
這倒是我始料未及的
不知大大有何建議的方式 能讓使用者明確知道Name屬性指的是學生的名字?

至於說Class為什麼會有那麼多種設定屬性的方法
就如同#8所說的那樣
簡單來說就是:專案1做好的Class 專案2想使用時 發現有些不合身 於是就在Class多設了一個適合專案2的窗口

如果按照大大以及[誰是誰]的理論
資料應該先整理好再丟給Class 那Class就不需要那麼多窗口了

至於各位大大們所打的內容 我都有看 :)
本篇文章回覆於2017-11-21 09:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

city
檢舉此回應
To:誰是誰

若按照大大以及[羅伯斯]的理論
的確可以先將資料處理好再丟給Class

可是如果要將Button1_Click裡面的內容全部打包成一個Class
是否還可以那麼簡單呢?
還是會如同[浩瀚星空]所說的核心Class那樣 有可能會有多個窗口?
(以上是個人見解)(或許[浩瀚星空]的原意並非如此)
本篇文章回覆於2017-11-21 10:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

city
檢舉此回應
大概了解前輩們的想法了

先來結束發問

當然前輩們還有要留言的可以留言 我也會回

先謝謝各位前輩們的意見 ^^

本篇文章回覆於2017-11-21 10:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.