我實際上不知道這是什麼在C#中調用。 但我想添加functionallity到我的課上同時添加多個項目。在C中的方法鏈接#
myObj.AddItem(mItem).AddItem(mItem2).AddItem(mItem3);
我實際上不知道這是什麼在C#中調用。 但我想添加functionallity到我的課上同時添加多個項目。在C中的方法鏈接#
myObj.AddItem(mItem).AddItem(mItem2).AddItem(mItem3);
您提到的技術稱爲可鏈式方法。它通常用於在C#中創建DSL或fluent interfaces。
典型的模式是讓你的AddItem()方法返回它所屬類(或接口)的一個實例。這允許後續的呼叫被鏈接到它。
public MyCollection AddItem(MyItem item)
{
// internal logic...
return this;
}
一些替代方法鏈接,添加物品的集合,包括:
使用params
語法允許多個項目要傳遞給你的方法作爲數組。有用的,當你要隱藏的陣列創建和你的方法提供了可變參數的語法:
public void AddItems(params MyItem[] items)
{
foreach(var item in items)
m_innerCollection.Add(item);
}
// can be called with any number of arguments...
coll.AddItems(first, second, third);
coll.AddItems(first, second, third, fourth, fifth);
提供了IEnumerable類型或IEnumerable的過載,使多個項目可以一起傳遞到您的收藏類。
public void AddItems(IEnumerable<MyClass> items)
{
foreach(var item in items)
m_innerCollection.Add(item);
}
使用.NET 3.5集合初始值設定項語法。你的類必須提供一個參數Add(item)
方法,實現IEnumerable,並且必須有一個默認的構造函數(或者你必須在初始化語句中調用一個特定的構造函數)。然後,你可以這樣寫:
var myColl = new MyCollection { first, second, third, ... };
使用此招。
public class MyClass
{
private List<MyItem> _Items = new List<MyItem>();
public MyClass AddItem (MyItem item)
{
// Add the object
if (item != null)
_Items.Add (item)
return this;
}
}
它返回當前的情況下,這將讓您鏈方法調用(因此增加多個對象「在同一時間」
不需要限制ADDITEM到MyClass的爭論。可能可能是Object或Item,或者其他東西。 – 2009-07-13 14:36:51
如果您的物品作爲一個列表,你可能想實現一個接口,如iList或iEnumerable/iEnumerable。
無論如何,鏈接調用的關鍵就像你想要返回的對象你要。
public Class Foo
{
public Foo AddItem(Foo object)
{
//Add object to your collection internally
return this;
}
}
是這樣的嗎?
class MyCollection
{
public MyCollection AddItem(Object item)
{
// do stuff
return this;
}
}
如何
AddItem(ICollection<Item> items);
或
AddItem(params Item[] items);
您可以使用它們像這樣
myObj.AddItem(new Item[] { item1, item2, item3 });
myObj.AddItem(item1, item2, item3);
這不是方法鏈,但它增加了多個項目到您的在一個電話中的對象。
「其實我也沒有什麼這就是所謂的在C#中的想法」
說一口流利的API; StringBuilder
是最常見的.NET例如:
var sb = new StringBuilder();
string s = sb.Append("this").Append(' ').Append("is a ").Append("silly way to")
.AppendLine("append strings").ToString();
其他人直方法鏈方面回答,但如果你正在使用C#3.0,你可能會感興趣的集合初始化 ...他們僅是可當你做一個構造函數調用,只有當你的方法有適當Add
方法和實現IEnumerable
,但你可以這樣做:
MyClass myClass = new MyClass { item1, item2, item3 };
你爲什麼不使用params
關鍵字?
public void AddItem (params MyClass[] object)
{
// Add the multiple items
}
您可以添加一個擴展方法來支持這一點,只要你的類自ICollection繼承:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void CanChainStrings()
{
ICollection<string> strings = new List<string>();
strings.AddItem("Another").AddItem("String");
Assert.AreEqual(2, strings.Count);
}
}
public static class ChainAdd
{
public static ICollection<T> AddItem<T>(this ICollection<T> collection, T item)
{
collection.Add(item);
return collection;
}
}
+1提及流暢的界面和提供鏈接 – 2009-07-13 14:44:42