Saya belajar tentang kontrak kode di .NET, dan saya mencoba memahami gagasan konstruktor murni. The kontrak Kode negara dokumentasi:
Semua metode yang disebut dalam kontrak harus murni; yaitu, mereka tidak boleh memperbarui keadaan yang sudah ada sebelumnya. Metode murni diizinkan untuk memodifikasi objek yang telah dibuat setelah masuk ke metode murni.
Dan PureAttribute
dokumentasinya menyatakan:
Menunjukkan bahwa suatu jenis atau metode adalah murni, artinya, itu tidak membuat perubahan status apa pun yang terlihat.
Saya mengerti pernyataan ini ketika datang ke metode, tetapi bagaimana dengan konstruktor? Misalkan Anda memiliki kelas seperti ini:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
Konstruktor ini jelas mempengaruhi keadaan Foo
objek baru , tetapi tidak memiliki efek samping lain (misalnya tidak memanipulasi salah satu parameter atau memanggil metode non-murni). Apakah ini kandidat untuk [Pure]
atau tidak? Apa pentingnya menempatkan [Pure]
atribut pada konstruktor, dan kapan saya harus melakukan ini dalam kode saya sendiri?
[Pure]
atribut, dan menggunakannya di tempat lain dalam kontrak untuk mendapatkan jawaban yang pasti.Objek tidak dapat digunakan sampai dibangun dalam kasus ini. Karena itu konstruktornya murni. Jika konstruktor memanggil kode lain, atau memanggil delegasi, dan kode lain memodifikasi properti yang bisa berubah, itu tidak akan murni. Agar lebih aman, lebih baik membuat properti tidak berubah.
sumber