2017-12-26 12 views
0

object expressionsで新しいオブジェクトインスタンスを作成するときにF#でSystem.Objectメソッドをオーバーライドできます。 1はすぐにToString()方法で印刷したい場合に非常に便利です。`new object()`とは何ですか?

let obj = { new System.Object() with member x.ToString() = "F#" } 
printfn "%A" obj 

しかし、私はロック文の横に、C#で新しいオブジェクトを作成する必要がある必要があるとき?

var obj = new object(); 
Console.WriteLine(obj); 
+0

わかりません。あなたが私たちと共有したい具体例を見つけましたか? – JLRishe

+0

ロックステートメントのほかに、 'object'をインスタンス化することは本当に便利ではありません...' object'インスタンスを比較のためのトークンとして使用できますが、それはそれです。 –

+0

いいえ、プライベート同期オブジェクトとして使用することを別にして、AFAIKは実際には実行時の 'object'型のインスタンスには使用されません。しかし、それもF#でも当てはまります。機能をオーバーライドすると、それは「オブジェクト」ではありませんか?唯一の違いは、F#が提供する便利な構文です。 – InBetween

答えて

1

通常、一つは、主に先立ってC#言語に追加されるジェネリックに書き込まれたAPIと対話するときにのみ、明示的にオブジェクト型を使用することができます。次の慣用法で

私の個人的な例:この例では

class NeedsToBeThreadSafe { 

    private static object _lock = new object(); 
    void ThreadSafeOperation() { 
      lock (_lock) 
      { 
       // Perform some useful work 
      } 
    } 
} 

、私はロックを実装するオブジェクトだけ_lockたかったです。メンバや値は必要ありません。したがって、オブジェクト型が適切です。

関連する問題