我在課堂上有一個公共方法。我想使這個私人並使用一個屬性來揭露這個方法。問題是我的方法接受一個整數參數並返回一個布爾值。根據我的經驗,財產必須接受並返回相同的類型。封裝此方法並使用屬性公開它的最佳做法是什麼?創建一個屬性,它接受與返回不同的類型
回答
你不應該用這種方式使用屬性。屬性用於將get_
和set_
調用包裝爲適當的後臺字段並將它們公開爲單個成員。內部生成的set_
方法爲void
,並接受屬性類型的實例作爲其唯一參數。
如果您試圖實現需要一個方法,然後公開一個方法。唯一可能的解決方案是使用object
。
如果傳入的值與返回值不同,那麼它是而不是屬性。如果你沿着這條路線走下去,你會爲任何需要調用你的代碼或者將來維護它的人造成混淆。
我能想到的唯一解決方案和一個差的就是聲明該屬性的類型爲object
。
封裝此方法並使用屬性公開它的最佳做法是什麼?
它必須是相同的屬性嗎?你能有類似的東西:
private Type2 _valueThatIsStoredAsAResultOfCallMethod;
private Type2 CallMethod(Type1 value)
{
// Whatever logic is required here to take a value of Type1 and
// get a value of Type2 from it
return value.ToType2();
}
public Type1
{
set
{
// value is of type Type1
_valueThatIsStoredAsAResultOfCallMethod = CallMethod(value);
}
}
public Type2
{
get
{
return _valueThatIsStoredAsAResultOfCallMethod;
}
}
沒有最好的做法,因爲這是一個不好的做法。
如果你有兩個協變類型作爲你的接受/迴歸,你可以用他們最低的共同祖先來引用它們,但我仍然會保持警惕。
嗯,一般來說,通過一個屬性調用一個方法是不好的做法(或者做任何複雜的屬性),因爲它不是該類的用戶預期會發生的事情。預期的行爲正在獲得價值。
我只是公開這個方法。
方法用於返回不同類型並接受輸入。
屬性沒有。他們返回一種類型並且不接受任何輸入。將兩者分開的主要事情之一。
接受參數並返回值的方法無法很好地轉換爲屬性,無論它使用何種類型。
該方法接受參數,然後返回結果,而一個參數接受一個值或返回一個值,而不是在同一個操作中。如果您必須首先使用該屬性,然後再讀取該值,那將非常直觀。根本不是你通常如何使用一個屬性。
public bool MyProp
{
get;
private set;
}
public int MyProp_AsInt
{
set
{
MyProp = (value > 0) ? true : false;
}
}
您的函數的主體可以替換上面的'set'。 我只是在那裏放了一些示例代碼。
確保將函數的返回值賦值給MyProp。
全碼
public class MyClass
{
public bool MyProp
{
get;
private set;
}
public int MyProp_AsInt
{
set
{
MyProp = (value > 0) ? true : false;
}
}
}
public class Program
{
static void Main(string[] args)
{
MyClass o = new MyClass();
o.MyProp_AsInt = 1;
System.Console.WriteLine("{0}", o.MyProp);
o.MyProp_AsInt = 0;
System.Console.WriteLine("{0}", o.MyProp);
string line = System.Console.ReadLine();
}
}
我建議你給你的答案添加一點解釋。僅有代碼的答案(有時)足夠好,但代碼+解釋答案(幾乎總是)更好 – Barranka 2014-08-27 18:49:04
- 1. 在Java中創建一個線程,該線程接受一個參數並返回不同類型的結果
- 2. 如何創建一個通用的函數接受不同的參數類型
- 3. 屬性值不可接受的類型,但類型是好的
- 4. Java:創建一個空接口來從一個屬性訪問不同的類?
- 5. 如何創建一個方法,接受2個對象的相同類型,屬性,並比較值
- 6. 元素與屬性的類型不同?
- 7. 如何構建它接受一個回調對象的JavaScript類
- 8. 抽象與不同的返回類型
- 9. 返回與參數不同的類型
- 10. 傳遞一個派生類,它接受一個抽象類型
- 11. Bulbflow不能創建一個Dictionary屬性類型
- 12. Auto屬性,返回一個接口
- 13. 返回一個自己類型的結構的Struct屬性
- 14. 當它屬性時創建一個UILabel
- 15. 「接受嵌套屬性」實際上不接受模型中的屬性
- 16. C#泛型 - 接受不同類型
- 17. 類具有相同的接口,但不同類型的屬性
- 18. 返回類型與返回類型(運算符++)不一致或不一致
- 19. 返回一個ReadOnlyCollection從方法與一個IList返回類型
- 20. 不可接受的屬性值屬性
- 21. 返回不同類型
- 22. 當它們的名稱與它們返回的數據類型相同時,屬性被重命名
- 23. 如何嘲笑接口接受類型的參數和返回另一個inteface
- 24. 貝寶返回「商家不接受這種類型的支付」
- 25. char []代碼中的返回類型不接受char [i] []值
- 26. HTML接受屬性的多個圖像類型
- 27. 創建一個函數,它接受一個向量並返回一個矩陣R
- 28. C#:重寫屬性,並返回一個派生類型
- 29. 一個泛型類型參數,返回類型不同的泛型?
- 30. 重寫屬性返回類型,C#
你是什麼建議?只是揭露這個方法? – rross 2011-05-03 13:56:51
@rross - 我向您建議了一個選項,這可能是我添加它時的兩個屬性,具有不同的類型。這可能是值得解釋**爲什麼**你想隱藏的方法,並通過暴露財產=) – Rob 2011-05-03 14:00:34