C#が新しいC#3.0機能でできることに驚いています。私はそこに何かを投げようとしていましたが、それはそうだと思っていましたが、私が望んでいたよりも良いことが判明しました。ここに 'tis。
すべての値を保持するオブジェクトを作成します(単に値の所有者としましょう...ただし、その用語の他の使用法と混同しないでください)。 C#の自動プロパティだけがあります。その後、価値所有者にアクセスできる別のオブジェクトを作成します。 2番目のオブジェクトを "SynchronicityHandler"と呼んでください。
SynchronicityHandlerにロックをさせてください。これは一般的なものになります。だからここにあなたが得るものです:私はそれについて考える、「値ホルダー」とは持っていない今、本当に
var myPerson = new SynchronicityHandler(new PersonValueHolder());
// Safely setting values
myPerson.WorkWithValueHolderSafely(p =>
{
p.FirstName = "Douglas";
p.LastName = "Adams";
p.HasCollegeDegree = true;
});
// Safely getting values (this syntax could be improved with a little effort)
string theFirstName = null;
myPerson.WorkWithValueHolderSafely(p=> theFirstName = p.FirstName);
Console.Writeline("Name is: " + theFirstName); // Outputs "Name is: Douglass".
:ここ
public class PersonValueHolder
{
public string FirstName { get; set; }
public string LastName { get; set; }
public bool HasCollegeDegree { get; set; }
}
public class SyncronicityHandler<T>
{
private object locker = new object();
private T valueHolder;
public SynchronicityHandler(T theValueHolder)
{
this.valueHolder = theValueHolder;
}
public void WorkWithValueHolderSafely(Action<T> yourAction)
{
lock(locker)
{
yourAction(valueHolder);
}
}
}
は、あなたがそれを呼び出すと思います方法の例です自動的な特性に過ぎない。どのオブジェクトでもかまいません。
邪悪なアイデア - ありがとう! – weismat
あなたは賭けます。私はそれがあなたのために働く方法を聞くのが大好きです。 –
これは 'string'のようなオブジェクトでうまくいくのでしょうか? – sarat