我有一段代碼是這樣工作的算法:籠統地說需要對不同的數據成員
void someAlgorithm(SomeType someVar)
{
someVar.someMember = createSomeValue();
lock(something)
{
SomeType someOtherVar = something.Find(someVar.unrelatedMember);
if(someOtherVar != null)
someOtherVar.someMember = someVar.someMember;
}
}
(我需要去適應它一下,用於發佈,所以請我,如果我承擔這樣做把事情搞糟了。)
現在我需要的代碼,這個確切的一塊爲另一成員的someVar
(其中有一個相關的,但不同類型的)和另一個創建函數。我知道我可以把這些代碼,複製它,替換一些標識符,然後完成。但我覺得這樣做很骯髒。我覺得應該有一種方法來推廣這個小算法。
我知道我可以隨時通過創建函數作爲代表,但我不知道該怎麼概括成員訪問,然後有不同類型的成員(和創造功能)的問題。
在C++中,我會用成員指針與這樣的模板相結合。成員指針並不完全是小菜一碟,但是一旦我查看了他們奇怪的語法,我會在幾分鐘內完成。如何在C#中做到這一點?
編輯:因爲這似乎並不太清楚,這裏是相同的算法的其他實例是這樣的:
void someOtherAlgorithm(SomeOtherType someVar) // 1 change here
{
someVar.someOtherMember = createSomeOtherValue(); // 2 changes here
lock(something)
{
SomeOtherType someOtherVar = something.Find(someVar.unrelatedMember);
if(someOtherVar != null)
someOtherVar.someOtherMember = someVar.someOtherMember; // 2 changes here
}
}
我希望這闡明瞭這一點。
這個方法體是完全一樣? – NullUserException 2010-10-07 16:05:17
@NullUserException:是的,除了'someMember'的所有用法被'someOtherMember'和'createSomeValue()'用'createSomeOtherValue()'代替。 – sbi 2010-10-07 16:34:30
'someOtherVar'與'someVar'是同一類型嗎? – SLaks 2010-10-07 16:42:49