<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.netindonesia.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Putra &amp;amp; .Net</title><link>http://geeks.netindonesia.net/blogs/adaapanya/default.aspx</link><description>Share what you have, to getting more. </description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Download Windows Developer Preview (pre-beta version of Windows 8 for developers)</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/09/14/download-windows-developer-preview-pre-beta-version-of-windows-8-for-developers.aspx</link><pubDate>Wed, 14 Sep 2011 14:32:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:193063</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=193063</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=193063</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/09/14/download-windows-developer-preview-pre-beta-version-of-windows-8-for-developers.aspx#comments</comments><description>The Windows Developer Preview is a pre-beta version of Windows 8 for developers . These downloads include prerelease software that may change without notice. The software is provided as is, and you bear the risk of using it. It may not be stable, operate...(&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/09/14/download-windows-developer-preview-pre-beta-version-of-windows-8-for-developers.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=193063" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/Windows+Developer+Preview/default.aspx">Windows Developer Preview</category></item><item><title>Mencicipi EntityFramework CodeFirst (EF 4.1)</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/08/09/berjalan-menelusuri-entityframework-codefirst.aspx</link><pubDate>Tue, 09 Aug 2011 09:36:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192968</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192968</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192968</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/08/09/berjalan-menelusuri-entityframework-codefirst.aspx#comments</comments><description>&lt;div class="TulisanKeren"&gt;      
	&lt;p&gt;&lt;strong&gt;Pada Entity Framework (EF) ada 3 hubungan yang bisa terjadi antara Model dan Database. 
	Yaitu :&lt;/strong&gt;&lt;/p&gt;
        
		Database First:
		Ini yang biasa kita lakukan. Kita menciptakan Model dari Database 
		yg sudah exist. Biasa disebut juga reverse-engineering.&lt;br /&gt;
		Model First:
		Kita menciptakan Model terlebih dahulu lalu kemudian kita menciptakan 
		Database dari Model tersebut.&lt;br /&gt;
		Code First:
		Kita menciptakan database dari Code yang kita ketikkan.&lt;br /&gt;
	
	&lt;p&gt;Hal yang menarik dari CodeFirst adalah kita bisa menciptakan database dengan 
	hanya sedikit usaha saja. Fitur ini terdapat dalam EF 4.1.&lt;/p&gt;
	&lt;p&gt;So, pada postingan kali ini kita akan melakukan semacam &lt;b&gt;walkthrough untuk mencoba CodeFirst.&lt;/b&gt;&lt;/p&gt;
	&lt;p&gt;Bagi yang belum tau bagaimana memanfaatkan code first, pertama sekali &lt;b&gt;kita harus mendownload EF 4.1 disini&lt;/b&gt;: &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=26825"&gt;http://www.microsoft.com/download/en/details.aspx?id=26825&lt;/a&gt;. Setelah itu lakukan penginstalan dan untuk mempergunakannya kita tinggal melakukan add reference ke &lt;b&gt;EntityFramework.dll&lt;/b&gt; yang berada pada &lt;code&gt;C:\Program Files (x86)\Microsoft ADO.NET Entity Framework 4.1\Binaries&lt;/code&gt;.	
	&lt;/p&gt;	
	&lt;h2&gt;Diagram database&lt;/h2&gt;
	&lt;p&gt;Lalu, Anggap misalnya kita mempunyai suatu model database seperti berikut ini:&lt;/p&gt;&lt;p&gt;&lt;img src="http://i273.photobucket.com/albums/jj236/adaapanya123/DataPemakaianObat_Diagram.png" alt="DataPemakaianObat_Diagram.png" /&gt;&lt;/p&gt;
	&lt;p&gt;Diatas adalah diagram Database yang akan kita buat dengan CodeFirst. Itu adalah diagram database DataPemakaianObat pada sebuah rumah sakit. Yang terdiri dari 4 table : &lt;/p&gt;
	
	Pasiens:
		Merepresentasikan seorang pasien rumah sakit. Pasien mempunyai poperty Diagnosa yg nilainya adalah deskripsi penyakit yang dideritanya.&lt;br /&gt;
	Alamats:
		Merepresentasikan alamat dari pasien.&lt;br /&gt;
	Obats:
		Merepresentasikan suatu obat.&lt;br /&gt;
	PasienObats:
		Pada Pasien dan Obat terdapat suatu hubungan &lt;b&gt;Many to Many&lt;/b&gt;. Untuk itulah table PasienObats exist. 
		Dan dia mempunyai property Jumlah yang menunjukkan jumlah obat yang diberikan kepada Pasien.&lt;br /&gt;
	
	&lt;p&gt;So, database DataPemakaianObat ini akan diisi jika ada seorang pasien dirumah sakit yang diberikan obat.&lt;/p&gt;
	&lt;h2&gt;Menambahkan reference&lt;/h2&gt;
	&lt;p&gt;Jadi, kita sudah mempunyai diagram database yang akan kita bangun dengan CodeFirst. 
	Lalu sekarang kita menuju ke VisualStudio. Create New ConsoleApps dan add reference ke : 
    &lt;b&gt;EntityFramework.dll&lt;/b&gt;, &lt;b&gt;System.Data.Entity.dll&lt;/b&gt; dan &lt;b&gt;System.ComponentModel.DataAnnotations.dll.&lt;/b&gt;&lt;/p&gt;
    &lt;p&gt;Lalu tambahkan perintah using seperti berikut ini :&lt;/p&gt;
    &lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data.Entity;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel.DataAnnotations;&lt;/pre&gt;
&lt;/div&gt;  
&lt;h2&gt;Mendefinisikan class DbContext&lt;/h2&gt;
&lt;p&gt;Selanjutnya kita akan membuat class baru yang menginherit class DbContext. Tambahkan code berikut:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; KonsumsiObatContext : DbContext&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; KonsumsiObatContext(&lt;span class="kwrd"&gt;string&lt;/span&gt; ConnectionString)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        : &lt;span class="kwrd"&gt;base&lt;/span&gt;(ConnectionString)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    { }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; DbSet&amp;lt;Pasien&amp;gt; Pasiens { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; DbSet&amp;lt;Alamat&amp;gt; Alamats { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; DbSet&amp;lt;Obat&amp;gt; Obats { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; DbSet&amp;lt;PasienObat&amp;gt; PasienObats { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Pada class KonsumsiObatContext diatas, 
kita memanggil base constructor untuk melewatkan sebuah ConnectionString&lt;/p&gt;
&lt;h2&gt;Mendefinisikan class-class Entity&lt;/h2&gt;
&lt;p&gt;Selanjutnya, tugas kita adalah mendefinikan class-class Entity, 
yaitu : Pasien, Alamat, Obat dan PasienObat.&lt;/p&gt;
&lt;h3&gt;Class Pasien&lt;/h3&gt;
&lt;p&gt;Kita mulai saja dengan defenisi class Pasien dengan menambahkan code berikut:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Pasien&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{        &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    [Key]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; PasienId { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Nama { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; DateTime Tgl_Lahir { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Kelamin { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Diagnosa { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;//Navigation Property&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; ICollection&amp;lt;PasienObat&amp;gt; PasienObats { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; ICollection&amp;lt;Alamat&amp;gt; Alamats { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Pada class Pasien diatas kita menggunakan attribute &lt;b&gt;Key&lt;/b&gt; untuk mendefinikan properti 
PasienId sebagai PrimaryKey.&lt;/p&gt;
&lt;h3&gt;Class Alamat&lt;/h3&gt;
&lt;p&gt;Untuk class Alamat, kita definisikan dengan code berikut:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Alamat&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    [Key]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; AlamatId { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Jalan { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Kota { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Provinsi { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Negara { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;//Foreign Key Property&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; PasienId { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="rem"&gt;//Navigation Property&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; Pasien Pasien { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;Class Obat&lt;/h3&gt;
&lt;p&gt;Untuk class Obat, kita definisikan dengan code berikut:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Obat&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    [Key]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ObatId { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Nama { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Dosis { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Satuan { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Manufaktur { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Harga { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;//Navigation Property&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; ICollection&amp;lt;PasienObat&amp;gt; PasienObats { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;Class PasienObat&lt;/h3&gt;
&lt;p&gt;Selanjutnya yang terakhir adalah class PasienObat. class PasienObat ini merepresentasikan Join Table
antara table Pasien dan Obat. Tambahkan code berikut untuk mendefinisikannya:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PasienObat&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;//property PasienID yg merupakan ForeignKey&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="rem"&gt;//dan bagian dari Composite PrimaryKey &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    [Key]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    [Column(&lt;span class="str"&gt;&amp;quot;PasienId&amp;quot;&lt;/span&gt;, Order = 0)]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; PasienId { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="rem"&gt;//property ObatID yg merupakan ForeignKey&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="rem"&gt;//dan bagian dari Composite PrimaryKey &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    [Key]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    [Column(&lt;span class="str"&gt;&amp;quot;ObatId&amp;quot;&lt;/span&gt;, Order = 1)]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ObatId { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Jumlah { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="rem"&gt;//Navigation Property&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; Pasien Pasien { get; set; }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; Obat Obat { get; set; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Pada class PasienObat diatas, kita harus mendifinisakan urutan dari Composite PrimaryKey. 
Kita melakukannya dengan menggunakan attribute Column dan men-set property Order sesuai dengan nilai urutan.&lt;/p&gt;
&lt;h2&gt;Running the Code&lt;/h2&gt;
&lt;p&gt;Seperti yang kita lihat diatas, pada dasarnya kita hanya mendefinisikan struktur Model database yang kita inginkan.
Hal ini kita lakukan dengan menggunakan beberapa attribute. Tapi, selain menggunakan attribute masih &lt;b&gt;ada cara lain&lt;/b&gt; 
untuk melakukannya yaitu dengan menggunakan class &lt;b&gt;DbModelBuilder&lt;/b&gt;. 
Tapi pada walkthrough ini kita cukup hanya menggunakan Attribute untuk melakukannya dengan tujuan untuk membuatnya ringkas.
Pada saat runtime nanti &lt;b&gt;EntityFramework akan menebak struktur dari Model yang kita definisikan&lt;/b&gt; tersebut. Dan jika valid, maka 
dia akan meng-compose SQL Commands. Dab SQL Commands ini lah yang akan di 
execute untuk meng-create Database.&lt;/p&gt;
&lt;p&gt;So, selanjutnya kita tinggal membuat class Program untuk meng-create Database 
dari struktur yang sudah kita definisikan diatas. Codenya seperti berikut :&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        var connString = &lt;span class="str"&gt;&amp;quot;Data Source=localhost; &amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                         &lt;span class="str"&gt;&amp;quot;Initial Catalog=KonsumsiObat; &amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                         &lt;span class="str"&gt;&amp;quot;Integrated Security=True; &amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                         &lt;span class="str"&gt;&amp;quot;MultipleActiveResultSets=True&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;using&lt;/span&gt; (var context = &lt;span class="kwrd"&gt;new&lt;/span&gt; KonsumsiObatContext(connString))&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        {                &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!context.Database.Exists())&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            {                &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                context.Database.Create();                &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Database created&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            &lt;span class="preproc"&gt;#region&lt;/span&gt;   Isi Data             &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            var newPasien = &lt;span class="kwrd"&gt;new&lt;/span&gt; Pasien&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                Nama = &lt;span class="str"&gt;&amp;quot;Joni&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                Kelamin = &lt;span class="str"&gt;&amp;quot;Laki-laki&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                Diagnosa = &lt;span class="str"&gt;&amp;quot;Demam&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                Tgl_Lahir = DateTime.Parse(&lt;span class="str"&gt;&amp;quot;05-05-1985&amp;quot;&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            };&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            var newAlamat = &lt;span class="kwrd"&gt;new&lt;/span&gt; Alamat&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                Jalan = &lt;span class="str"&gt;&amp;quot;Jl. Merdeka No. 55&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                Kota = &lt;span class="str"&gt;&amp;quot;Medan&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                Provinsi = &lt;span class="str"&gt;&amp;quot;Sumatera Utara&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                Negara = &lt;span class="str"&gt;&amp;quot;Indonesia&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                Pasien = newPasien&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            };&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            var newObat = &lt;span class="kwrd"&gt;new&lt;/span&gt; Obat&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                Nama = &lt;span class="str"&gt;&amp;quot;Paracetamol Syrup&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                Manufaktur = &lt;span class="str"&gt;&amp;quot;PT. Kimia Farma&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                Dosis = 60,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                Satuan = &lt;span class="str"&gt;&amp;quot;ml&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                Harga = 10000&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            };&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            var newPasienObat = &lt;span class="kwrd"&gt;new&lt;/span&gt; PasienObat&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                Pasien = newPasien,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                Obat = newObat,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                Jumlah = 1&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;            };&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;            context.Pasiens.Add(newPasien);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;            context.Alamats.Add(newAlamat);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;            context.Obats.Add(newObat);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;            context.PasienObats.Add(newPasienObat);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            context.SaveChanges();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;            &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;            var pasien = context.Pasiens&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;                            .Include(&lt;span class="str"&gt;&amp;quot;Alamats&amp;quot;&lt;/span&gt;)                             &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                            .Include(&lt;span class="str"&gt;&amp;quot;PasienObats.Obat&amp;quot;&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;                            .FirstOrDefault();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Nama: {0} \nAlamat: {1} \nObat: {2}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;                pasien.Nama,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                pasien.Alamats.First().Kota,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;                pasien.PasienObats.First().Obat.Nama&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;            );&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;                             &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Pada code diatas, kita mencreate Database menggunakan object Database yang merupakan property dari object DbContext (&lt;b&gt;Line 13&lt;/b&gt;). 
Setelah itu seperti yg disebutkan diatas, EntityFramework akan memeriksa struktur dari Model yang kita definisikan dan meng-compose Commands 
yang akhirnya diexecute untuk mengcreate Database.&lt;/p&gt;
&lt;p&gt;Pada bagian terakhir kita melakukan penginputan data dan melakukan suatu query ke database (&lt;b&gt;Line 17 - line 
62&lt;/b&gt;) untuk melakukan testing terhadap Database yang baru kita create.&lt;/p&gt;
&lt;p&gt;OK. Itulah walkthrough tentang CodeFirst, semoga bermanfaat.&lt;/p&gt;

&lt;/div&gt;

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/08/09/berjalan-menelusuri-entityframework-codefirst.aspx&amp;amp;subject=Mencicipi EntityFramework CodeFirst (EF 4.1)" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/08/09/berjalan-menelusuri-entityframework-codefirst.aspx&amp;amp;t=Mencicipi+EntityFramework+CodeFirst+(EF+4.1)" target="_blank" title="Submit Mencicipi EntityFramework CodeFirst (EF 4.1) to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/08/09/berjalan-menelusuri-entityframework-codefirst.aspx&amp;amp;title=Mencicipi+EntityFramework+CodeFirst+(EF+4.1)" target="_blank" title="Submit Mencicipi EntityFramework CodeFirst (EF 4.1) to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/08/09/berjalan-menelusuri-entityframework-codefirst.aspx&amp;amp;phase=2" target="_blank" title="Submit Mencicipi EntityFramework CodeFirst (EF 4.1) to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/08/09/berjalan-menelusuri-entityframework-codefirst.aspx&amp;amp;title=Mencicipi+EntityFramework+CodeFirst+(EF+4.1)" target="_blank" title="Add Mencicipi EntityFramework CodeFirst (EF 4.1) to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192968" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/entity+framework/default.aspx">entity framework</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/ef/default.aspx">ef</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/codefirst/default.aspx">codefirst</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/code+first/default.aspx">code first</category></item><item><title>Implementasi Interface secara Biasa dan secara Explisit</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/13/implementasi-interface-secara-biasa-dan-secara-explisit.aspx</link><pubDate>Tue, 12 Jul 2011 20:18:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192827</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192827</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192827</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/13/implementasi-interface-secara-biasa-dan-secara-explisit.aspx#comments</comments><description>&lt;p&gt;Pada postingan kali ini saya ingin membahas tentang Implementasi Interface secara biasa dan Implementasi interface secara Explisit.&lt;/p&gt;
&lt;p&gt;Seperti kita tau interface itu adalah sebuah class yang mendefinisikan satu atau lebih member.&lt;/p&gt;
&lt;p&gt;Tetapi member-member tersebut tidak mempunyai implementasi.&lt;/p&gt;
&lt;p&gt;Class lain yang meng-implementasi interface lah yang harus mendefenisikan implementasi  untuk member-member tersebut.&lt;/p&gt;
&lt;p&gt;Nah, didalam C# bila kita meng-implement suatu interface, kita mempunyai 2 opsi untuk melakukannya.&lt;/p&gt;
&lt;p&gt;Yaitu secara biasa, atau secara Explisit.&lt;/p&gt;
&lt;p&gt;Kalau kita meng-implementasi suatu interface secara biasa, maka member-member tersebut bisa diakses dari class yang meng-implementasi interface tersebut tanpa perlu melakukan casting ke interface tersebut.&lt;/p&gt;
&lt;p&gt;Tapi, jika kita meng-implemetasi interface secara Explisit, maka member-member tersebut hanya bisa diakses kalau kita melakukan casting ke interface tersebut.&lt;/p&gt;
&lt;p&gt;Untuk lebih jelasnya kita bisa perhatikan kode berikut :&lt;/p&gt;
&lt;p&gt;Misal, kita punya interface ISomeInterface seperti ini :&lt;/p&gt;

&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; ISomeInterface&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;void&lt;/span&gt; SomeMethod();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Lalu kita punya class Base yang mengimplementasi ISomeInterface. Kalau kita meng-implementasi interface secara biasa, maka kita melakukannya seperti ini :&lt;/p&gt;


&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Base : ISomeInterface
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SomeMethod()
    {
        &lt;span class="rem"&gt;//Base.SomeMethod&lt;/span&gt;
    }
}&lt;/pre&gt;
&lt;p&gt;Lalu kalau kita mau melakukan implementasi interface secara Explisit, kita melakukannya seperti ini :&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Derived : Base, ISomeInterface
{
    &lt;span class="kwrd"&gt;void&lt;/span&gt; ISomeInterface.SomeMethod()
    {
        &lt;span class="rem"&gt;//ISomeInterface.SomeMethod&lt;/span&gt;
    }
}&lt;/pre&gt;
&lt;p&gt;Class Derived diatas adalah turunan dari Base dan meng-implementasi ISomeInterface secara explisit. Kita bisa lihat cara penulisan SomeMethod yang harus ditulis secara FullName.&lt;/p&gt;
&lt;p&gt;Seperti yang disebutkan diatas, Interface yang diimplement secara biasa, maka member-membernya bisa diakses dari Class yang meng-implement interface tersebut tanpa melakukan casting. Sedangkan Interface yang diimplement secara eksplisit, maka untuk mengakses member-membernya kita harus melakukan casting ke interface tersebut. Contohnya pada kode dibawah ini :&lt;br /&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;Derived myDerived = &lt;span class="kwrd"&gt;new&lt;/span&gt; Derived();

&lt;span class="rem"&gt;//output : Base.SomeMethod&lt;/span&gt;
myDerived.SomeMethod(&lt;span class="str"&gt;&lt;/span&gt;);

&lt;span class="rem"&gt;//output : ISomeInterface.SomeMethod&lt;/span&gt;
((ISomeInterface)myDerived).SomeMethod(&lt;span class="str"&gt;&lt;/span&gt;);
&lt;/pre&gt;
&lt;p&gt;Untuk bahan pengamatan, kita bisa melakukan coding sendiri dan mempelajari dampak dari pengimplementasian interface secara biasa atau secara explisit. Seperti kode dibawah ini, yang mana ditambahkan satu buah interface lagi yaitu IOtherInterface dan kemudian di-implement secara explisit oleh Base Class dan Derived Class.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; ISomeInterface
{
    &lt;span class="kwrd"&gt;void&lt;/span&gt; SomeMethod();
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IOtherInterface
{
    &lt;span class="kwrd"&gt;void&lt;/span&gt; OtherMethod();
}   

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Base : ISomeInterface, IOtherInterface
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SomeMethod()
    {
        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Base.SomeMethod&amp;quot;&lt;/span&gt;);
    }

    &lt;span class="kwrd"&gt;void&lt;/span&gt; IOtherInterface.OtherMethod()
    {
        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;IOtherInterface.OtherMethod, Base&amp;quot;&lt;/span&gt;);
    }      
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Derived : Base, ISomeInterface, IOtherInterface
{
    &lt;span class="kwrd"&gt;void&lt;/span&gt; ISomeInterface.SomeMethod()
    {
        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;ISomeInterface.SomeMethod&amp;quot;&lt;/span&gt;);
    }

    &lt;span class="kwrd"&gt;void&lt;/span&gt; IOtherInterface.OtherMethod()
    {
        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;IOtherInterface.OtherMethod, Derived&amp;quot;&lt;/span&gt;);
    }       
}&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;Base myBase = &lt;span class="kwrd"&gt;new&lt;/span&gt; Base();
Derived myDerived = &lt;span class="kwrd"&gt;new&lt;/span&gt; Derived();

&lt;span class="rem"&gt;//output : Base.SomeMethod&lt;/span&gt;
myBase.SomeMethod();

&lt;span class="rem"&gt;//output : IOtherInterface.OtherMethod, Base&lt;/span&gt;
((IOtherInterface)myBase).OtherMethod(); 

&lt;span class="rem"&gt;//output : Base.SomeMethod              &lt;/span&gt;
myDerived.SomeMethod();

&lt;span class="rem"&gt;//output : ISomeInterface.SomeMethod&lt;/span&gt;
((ISomeInterface)myDerived).SomeMethod();

&lt;span class="rem"&gt;//output : IOtherInterface.OtherMethod, Derived&lt;/span&gt;
((IOtherInterface)myDerived).OtherMethod();&lt;/pre&gt;Lalu bagaimana, bila kita meng-implement interface secara biasa dan juga secara explisit ?, seperti contoh berkut ini :&lt;br /&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; ISomeInterface
{
    &lt;span class="kwrd"&gt;void&lt;/span&gt; SomeMethod();
}

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; OtherClass : ISomeInterface
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SomeMethod()
    {
        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;This is the OtherClass&amp;#39;s Method&amp;quot;&lt;/span&gt;);
    }

    &lt;span class="kwrd"&gt;void&lt;/span&gt; ISomeInterface.SomeMethod()
    {
        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;ISomeInterface.SomeMethod&amp;quot;&lt;/span&gt;);
    }
}&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;ISomeInterface mySomeInterface = &lt;span class="kwrd"&gt;new&lt;/span&gt; OtherClass();&lt;/pre&gt;&lt;pre class="csharpcode"&gt;//output : ISomeInterface.SomeMethod
mySomeInterface.SomeMethod();&lt;/pre&gt;&lt;br /&gt;Ketika interface tersebut kita implement secara biasa dan secara eksplisit, Maka pemanggilan SomeMethod akan memanggil SomeMethod yang implementasinya dilaksanakan secara eksplisit. &lt;b&gt;Dan SomeMethod yang diimplement secara biasa, akan dianggap sebagai member biasa dari OtherClass, not the member of the interface.&lt;/b&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/13/implementasi-interface-secara-biasa-dan-secara-explisit.aspx&amp;amp;subject=Implementasi Interface secara Biasa dan secara Explisit" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/13/implementasi-interface-secara-biasa-dan-secara-explisit.aspx&amp;amp;t=Implementasi+Interface+secara+Biasa+dan+secara+Explisit" target="_blank" title="Submit Implementasi Interface secara Biasa dan secara Explisit to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/13/implementasi-interface-secara-biasa-dan-secara-explisit.aspx&amp;amp;title=Implementasi+Interface+secara+Biasa+dan+secara+Explisit" target="_blank" title="Submit Implementasi Interface secara Biasa dan secara Explisit to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/13/implementasi-interface-secara-biasa-dan-secara-explisit.aspx&amp;amp;phase=2" target="_blank" title="Submit Implementasi Interface secara Biasa dan secara Explisit to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/13/implementasi-interface-secara-biasa-dan-secara-explisit.aspx&amp;amp;title=Implementasi+Interface+secara+Biasa+dan+secara+Explisit" target="_blank" title="Add Implementasi Interface secara Biasa dan secara Explisit to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192827" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/explisit/default.aspx">explisit</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/interface/default.aspx">interface</category></item><item><title>Mengetahui EntityState pada Entity Framework</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/06/mengetahui-entitystate-pada-entity-framework.aspx</link><pubDate>Wed, 06 Jul 2011 09:59:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192779</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192779</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192779</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/06/mengetahui-entitystate-pada-entity-framework.aspx#comments</comments><description>&lt;p&gt;Pada EF (Entity Framework) Masing-masing object yang telah di-Materialized mempunyai state-nya masing-masing.&lt;/p&gt;
&lt;p&gt;Daftar state tersebut bisa kita lihat pada enumeration EntityState yang terdapat pada Namespace System.Data.&lt;/p&gt;
&lt;p&gt;Ini adalah daftar state tersebut :&lt;/p&gt;

&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; EntityState&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{        &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    Detached = 1,     &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    Unchanged = 2,        &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    Added = 4,        &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    Deleted = 8,        &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    Modified = 16,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;From MSDN :&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Detached : &lt;/b&gt;The object exists but is not being tracked. An entity is in this   state immediately after it has been created and before it is added to   the object context. An entity is also in this state after it has been   removed from the context by calling the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.detach.aspx"&gt;Detach&lt;/a&gt; method or if it is loaded by using a &lt;span class="unresolvedLink"&gt;NoTracking&lt;/span&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.mergeoption.aspx"&gt;MergeOption&lt;/a&gt;. There is no &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectstateentry.aspx"&gt;ObjectStateEntry&lt;/a&gt; instance associated with objects in the &lt;span class="selflink"&gt;Detached&lt;/span&gt; state.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Unchanged :&lt;/b&gt; The object has not been modified since it was attached to the context or since the last time that the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savechanges.aspx"&gt;SaveChanges&lt;/a&gt; method was called.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Added :&lt;/b&gt; The object is new, has been added to the object context, and the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savechanges.aspx"&gt;SaveChanges&lt;/a&gt; method has not been called. After the changes are saved, the object state changes to &lt;span class="selflink"&gt;Unchanged&lt;/span&gt;. Objects in the &lt;span class="selflink"&gt;Added&lt;/span&gt; state do not have original values in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectstateentry.aspx"&gt;ObjectStateEntry&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Deleted :&lt;/b&gt; The object has been deleted from the object context. After the changes are saved, the object state changes to &lt;span class="selflink"&gt;Detached&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Modified : &lt;/b&gt;One of the scalar properties on the object was modified and the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.savechanges.aspx"&gt;SaveChanges&lt;/a&gt; method has not been called. In POCO entities without change-tracking proxies, the state of the modified properties changes to &lt;span class="selflink"&gt;Modified&lt;/span&gt; when the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.detectchanges.aspx"&gt;DetectChanges&lt;/a&gt; method is called. After the changes are saved, the object state changes to &lt;span class="selflink"&gt;Unchanged&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Sesuai keterangan diatas, maka ketika EntityObject sudah berada di Memory, mereka pasti memiliki salah satu state yang terdapat pada Enumeration EntityState (&lt;b&gt;Detached, Unchanged, Added, Deleted, Modified&lt;/b&gt;).&lt;/p&gt;
&lt;p&gt;Untuk lebih jelas-nya kita bisa menjalankan code berikut. Yang isinya adalah, meng-query sembarang Entity dari database, dan melakukan suatu Modifikasi pada EntityObject tersebut dan kemudian mengamati state yang mereka miliki :&lt;/p&gt;

&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (var context = &lt;span class="kwrd"&gt;new&lt;/span&gt; NorthwindEntities())&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    context.ContextOptions.LazyLoadingEnabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    var customers = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Customer&amp;gt;();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="rem"&gt;//Detached EntityState&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    var detached = context.Customers.First();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    context.Detach(detached);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    customers.Add(detached);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;//Unchanged EntityState&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    var unchanged = context.Customers&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                    .OrderByDescending(c =&amp;gt; c.CustomerID).First();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    customers.Add(unchanged);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="rem"&gt;//Added EntityState&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    var added = &lt;span class="kwrd"&gt;new&lt;/span&gt; Customer();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    added.CustomerID = &lt;span class="str"&gt;&amp;quot;AGUTR&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    added.ContactName = &lt;span class="str"&gt;&amp;quot;Agus Syahputra&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    context.Customers.AddObject(added);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    customers.Add(added);   &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="rem"&gt;//Deleted EntityState&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    var deleted = context.Customers.Take(2).ToList()&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                  .OrderByDescending(c =&amp;gt; c.CustomerID).First();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    context.DeleteObject(deleted);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    customers.Add(deleted);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;    &lt;span class="rem"&gt;//Modified EntityState&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;    var modified = context.Customers.Take(3).ToList()&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                   .OrderByDescending(c =&amp;gt; c.CustomerID).First();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    modified.ContactName += modified.ContactName;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    customers.Add(modified);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var c &lt;span class="kwrd"&gt;in&lt;/span&gt; customers)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;{0} - |{1}|&amp;quot;&lt;/span&gt;, c.CustomerID, c.EntityState);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    }    &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Pada code diatas saya menggunakan Database Northwind, yang bisa didownload di situs Microsoft or search from internet.&lt;/p&gt;
&lt;p&gt;Pada code diatas, apabila SaveChanges dipanggil, maka EF akan meng-create Commands untuk dikirim ke database sesuai dengan state dari masing-masing Entity Object, misal, pada  EntityObject yang memiliki state Added EF akan meng-create Insert Command dan kemudian mengirimkannya ke database untuk diExecute. Tetapi untuk Entity yang memiliki state &lt;b&gt;Unchanged&lt;/b&gt; dan &lt;b&gt;Detached&lt;/b&gt; maka ObjectContext tidak akan meng-create suatu Command untuk dikirim ke database.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Ini adalah output dari program diatas :&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/5.PNG"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/5.PNG"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/5.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Pada output, kita bisa melihat bahwa masing-masing Entity mempunyai statenya masing-masing.&lt;/p&gt;&lt;p&gt;OK. Sekian dulu.&lt;br /&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/06/mengetahui-entitystate-pada-entity-framework.aspx&amp;amp;subject=Mengetahui EntityState pada Entity Framework" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/06/mengetahui-entitystate-pada-entity-framework.aspx&amp;amp;t=Mengetahui+EntityState+pada+Entity+Framework" target="_blank" title="Submit Mengetahui EntityState pada Entity Framework to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/06/mengetahui-entitystate-pada-entity-framework.aspx&amp;amp;title=Mengetahui+EntityState+pada+Entity+Framework" target="_blank" title="Submit Mengetahui EntityState pada Entity Framework to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/06/mengetahui-entitystate-pada-entity-framework.aspx&amp;amp;phase=2" target="_blank" title="Submit Mengetahui EntityState pada Entity Framework to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/06/mengetahui-entitystate-pada-entity-framework.aspx&amp;amp;title=Mengetahui+EntityState+pada+Entity+Framework" target="_blank" title="Add Mengetahui EntityState pada Entity Framework to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192779" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/entity+framework/default.aspx">entity framework</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/ef/default.aspx">ef</category></item><item><title>Mengimplementasi SQL Server's Odd View pada EF 4</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/03/mengimplementasi-sql-server-s-odd-view-pada-ef-4.aspx</link><pubDate>Sun, 03 Jul 2011 05:35:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192750</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192750</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192750</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/03/mengimplementasi-sql-server-s-odd-view-pada-ef-4.aspx#comments</comments><description>&lt;p&gt;Kemarin ada pertanyaan di stackoverflow.com, detailnya you can see &lt;a href="http://stackoverflow.com/questions/6494996/why-cant-i-use-a-view-containing-a-union-in-entity-framework-4-0" target="_blank"&gt;here.&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Pertanyaannya&amp;nbsp; :&lt;/p&gt;&lt;p&gt;&lt;i&gt;I have a View which looks similar to this:&lt;br /&gt;&lt;br /&gt;SELECT Id, Name&lt;br /&gt;FROM Users&lt;br /&gt;UNION ALL&lt;br /&gt;SELECT NULL as [Id], NULL as [Name]&lt;br /&gt;&lt;br /&gt;When I try to map to this view in Entity Framework, it just fails. I don&amp;#39;t get an error, but the view does not exist in my data store. Why is this? Is there a way around it?&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sebenarnya, bukan EF tidak mendukung Union tetapi T-SQL-nya yg agak aneh. Jadinya EF gak bisa meng-create Metadata untuk View tsb.&lt;/p&gt;&lt;p&gt;So, untuk lebih jelasnya kita bisa melakukan simulasi.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Anggap kita punya tabel di database seperti ini :&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/Capture.PNG"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/Capture.PNG"&gt;&lt;/a&gt;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/Capture.PNG"&gt;&lt;/a&gt;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/Capture1.PNG"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/Capture1.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Lalu kita create View dengan nama ContactOddView dengan T-SQL seperti ini :&amp;nbsp;
&lt;/p&gt;&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;VIEW&lt;/span&gt; [ContactCustomer]&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; con.ContactID, con.Name&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; Contacts &lt;span class="kwrd"&gt;AS&lt;/span&gt; con&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;UNION&lt;/span&gt; &lt;span class="kwrd"&gt;ALL&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt; &lt;span class="kwrd"&gt;AS&lt;/span&gt; ContactID, &lt;span class="kwrd"&gt;NULL&lt;/span&gt; &lt;span class="kwrd"&gt;AS&lt;/span&gt; Name&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;
Lalu kita create Model di Visual Studio dan select View yg baru kita create di database :&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/Capture2.PNG"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/Capture2.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Tetapi,Visual Studio akan gagal meng-create metadata untuk View ContactOddView. Ini bisa kita lihat Entity Model untuk ContactOddView tidak tampak di Model Designer. Dan untuk lebih pastinya kita bisa buka edmx file dengan XML Editor. Dan pada SSDL section kita akan melihat suatu pesan Error like this :&lt;/p&gt;&lt;pre style="font-family:Courier New;font-size:13;color:black;background:white;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt;Errors&amp;nbsp;Found&amp;nbsp;During&amp;nbsp;Generation:&lt;/span&gt;
&lt;span style="color:green;"&gt;warning&amp;nbsp;6013:&amp;nbsp;The&amp;nbsp;table/view&amp;nbsp;&amp;#39;PhoneBook.dbo.ContactOddView&amp;#39;&amp;nbsp;does&amp;nbsp;not&amp;nbsp;have&amp;nbsp;a&amp;nbsp;primary&amp;nbsp;key&amp;nbsp;defined&amp;nbsp;and&amp;nbsp;no&amp;nbsp;valid&amp;nbsp;primary&amp;nbsp;key&amp;nbsp;could&amp;nbsp;be&amp;nbsp;inferred. &lt;br /&gt;This&amp;nbsp;table/view&amp;nbsp;has&amp;nbsp;been&amp;nbsp;excluded.&amp;nbsp;To&amp;nbsp;use&amp;nbsp;the&amp;nbsp;entity,&amp;nbsp;you&amp;nbsp;will&amp;nbsp;need&amp;nbsp;to&amp;nbsp;review&amp;nbsp;your&amp;nbsp;schema,&amp;nbsp;add&amp;nbsp;the&amp;nbsp;correct&amp;nbsp;keys,&amp;nbsp;and&amp;nbsp;uncomment&amp;nbsp;it.&lt;/span&gt;
&lt;span style="color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;span style="color:green;"&gt;&amp;lt;EntityType&amp;nbsp;Name=&amp;quot;ContactOddView&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span style="color:green;"&gt;    &amp;lt;Property&amp;nbsp;Name=&amp;quot;ContactID&amp;quot;&amp;nbsp;Type=&amp;quot;int&amp;quot;&amp;nbsp;/&amp;gt;&lt;/span&gt;
&lt;span style="color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Property&amp;nbsp;Name=&amp;quot;Name&amp;quot;&amp;nbsp;Type=&amp;quot;varchar&amp;quot;&amp;nbsp;MaxLength=&amp;quot;50&amp;quot;&amp;nbsp;/&amp;gt;&lt;/span&gt;
&lt;span style="color:green;"&gt;&amp;lt;/EntityType&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Sesuai dengan pesan errornya, ini terjadi karena VS tidak bisa menebak PK yg valid untuk View tersebut.&lt;/p&gt;&lt;p&gt;So, bagaimana caranya agar kita menampilkan View tersebut ?&lt;/p&gt;&lt;p&gt;Kita bisa melakukannya dengan mengotak-atik edmx file. Yaitu dengan meng-create sendiri metadata untuk view tersebut dengan tujuan untuk menentukan PK untuk View tersebut. Disini kita harus membuat metadata baru pada SSDL, CSDL, dan MSL section pada edmx file.&lt;/p&gt;&lt;p&gt;So akan ada 3 langkah untuk melakukannya :&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;1. Typing pada SSDL section&lt;/span&gt; &lt;/p&gt;&lt;p&gt;Kita mulai saja pada SSDL section. Kita harus menambahkan metadata ke dalam element&amp;nbsp; EntityContainer like this :&lt;br /&gt;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;EntityContainer&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PhoneBookModelStoreContainer&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;EntitySet&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactOddView&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;EntityType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PhoneBook.Store.ContactOddView&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;store:Type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Views&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DefiningQuery&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;              SELECT con.ContactID, con.Name&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;              FROM Contacts AS con&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;              UNION ALL&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;              SELECT NULL AS ContactID, NULL AS Name&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DefiningQuery&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;EntitySet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;Lalu kita definisakan juga Metadata untuk EntityType&amp;nbsp;&lt;span style="font-family:monospace;"&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;&lt;span style="font-family:monospace;"&gt;&lt;/span&gt;PhoneBook.Store.ContactOddView. Yang mana, disinilah kita akan menetapkan PK untuk View tersebut (Yang menjadi inti permasalahannya karena VS tidak bisa meng-infer valid PK untuk &lt;/span&gt;&lt;span class="kwrd"&gt;ContactOddView&lt;/span&gt;&lt;span class="kwrd"&gt; ). Masukkan code berikut pada bagian pendefinisian EntityType : &lt;/span&gt;
&lt;/p&gt;&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;EntityType&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactOddView&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Key&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;PropertyRef&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactID&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Key&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Property&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactID&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;int&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Nullable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; StoreGeneratedPattern=&amp;quot;None&amp;quot; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Property&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;varchar&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Nullable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;MaxLength&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;        &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;EntityType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;2. Typing pada CSDL section&lt;br /&gt;&lt;br /&gt;
&lt;/b&gt;Karena CSDL merupakan cerminan dari SSDL. Kita tinggal ikutin aja metadata yg baru kita define di SSDL.&lt;/p&gt;
&lt;p&gt;The First&amp;nbsp; Step is, mendefinisakan metadata untuk EntitySet ContactOddView. So, tambahkan code berikut pada element EntityContainer :&lt;/p&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;EntitySet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ContactOddView&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red;"&gt;EntityType&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;PhoneBookModel.ContactOddView&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
Lalu kita define metadata untuk EntityTypenya yaitu PhoneBookModel.ContactOddView. Dengan menambahkan code berikut pada pendifinisian EntityType :

&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;EntityType&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactOddView&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Key&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;PropertyRef&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactID&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Key&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Property&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactID&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Int32&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Nullable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;annotation:StoreGeneratedPattern&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;None&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Property&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;String&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Nullable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;MaxLength&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Unicode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;FixedLength&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;EntityType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;3. Typing pada MSL section &lt;/b&gt;&lt;/p&gt;&lt;p&gt;Pada MSL section kita harus mendefinisikan Mapping antara EntitySet di CSDL dan SSDL. &lt;br /&gt;So tambahkan code berikut ini didalam element EntityContainerMapping&amp;nbsp; :&lt;/p&gt;

&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;EntitySetMapping&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt; &lt;span class="kwrd"&gt;=&amp;quot;ContactOddViews&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;EntityTypeMapping&lt;/span&gt; &lt;span class="attr"&gt;TypeName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PhoneBookModel.ContactOddView&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MappingFragment&lt;/span&gt; &lt;span class="attr"&gt;StoreEntitySet&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactOddViews&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ScalarProperty&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactID&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ColumnName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ContactID&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ScalarProperty&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt;  &lt;span class="attr"&gt;ColumnName&lt;/span&gt; &lt;span class="kwrd"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;                &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;MappingFragment&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;EntityTypeMapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;EntitySetMapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;OK. selesai sudah kita memodifikasi edmx file. Sekarang kita bisa buka edmx file tersebut di Model Designer dan ContactOddView pun sudah bisa ditampilkan.&lt;/p&gt;&lt;p&gt;Sekarang saatnya kita harus mengetes Model tersebut dengan melakukan suatu query.&lt;/p&gt;&lt;p&gt;Misal, kita melakukan query di database seperti ini :&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SELECT * FROM ContactOddView&lt;/p&gt;&lt;p&gt;Maka result yg dihasilkan yaitu :&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/3.PNG"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/3.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;So now, kita melakukan pengetesan dari Visual Studio. Misalnya dengan code seperti ini :&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (var context = &lt;span class="kwrd"&gt;new&lt;/span&gt; PhoneBookEntities())&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    var qry = context.ContactOddViews;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var q &lt;span class="kwrd"&gt;in&lt;/span&gt; qry)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (q != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt; name = q.Name;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (q.Name == &lt;span class="kwrd"&gt;null&lt;/span&gt;) { name = &lt;span class="str"&gt;&amp;quot;null&amp;quot;&lt;/span&gt;; }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;{0} - {1}&amp;quot;&lt;/span&gt;, q.ContactID, name);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;null - null&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Dan outputnya :&lt;br /&gt;&lt;br /&gt;
  &lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/4.PNG"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/4.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OK, dari sini bisa kita simpulkan bahwa ketika kita ingin mendefinisikan suatu Model yang agak aneh yg Visual Studio or EF tidak bisa meng-create metadata untuk Model tersebut, Kita bisa melakukan modifikasi manual terhadap file edmx, dengan mendifinisikan metadata yg diperlukan pada SSDL, CSDL dan MSL section. Pada kasus ini kita mempergunakan element &amp;lt;DefiningQuery&amp;gt; untuk mendefinisikan T-SQL. For more information tentang &amp;lt;DefiningQuery&amp;gt; bisa dilihat di MSDN library.&lt;br /&gt;&lt;br /&gt;OK. Semoga post ini berguna.&lt;br /&gt;
&lt;/p&gt;

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/03/mengimplementasi-sql-server-s-odd-view-pada-ef-4.aspx&amp;amp;subject=Mengimplementasi SQL Server's Odd View pada EF 4" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/03/mengimplementasi-sql-server-s-odd-view-pada-ef-4.aspx&amp;amp;t=Mengimplementasi+SQL+Server%27s+Odd+View+pada+EF+4" target="_blank" title="Submit Mengimplementasi SQL Server's Odd View pada EF 4 to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/03/mengimplementasi-sql-server-s-odd-view-pada-ef-4.aspx&amp;amp;title=Mengimplementasi+SQL+Server%27s+Odd+View+pada+EF+4" target="_blank" title="Submit Mengimplementasi SQL Server's Odd View pada EF 4 to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/03/mengimplementasi-sql-server-s-odd-view-pada-ef-4.aspx&amp;amp;phase=2" target="_blank" title="Submit Mengimplementasi SQL Server's Odd View pada EF 4 to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/07/03/mengimplementasi-sql-server-s-odd-view-pada-ef-4.aspx&amp;amp;title=Mengimplementasi+SQL+Server%27s+Odd+View+pada+EF+4" target="_blank" title="Add Mengimplementasi SQL Server's Odd View pada EF 4 to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192750" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/edmx/default.aspx">edmx</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/edm/default.aspx">edm</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/entity+framework/default.aspx">entity framework</category></item><item><title>Lazy Loading di Entity Framework 4</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/30/lazy-loading-di-entity-framework-4.aspx</link><pubDate>Wed, 29 Jun 2011 17:22:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192735</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192735</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192735</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/30/lazy-loading-di-entity-framework-4.aspx#comments</comments><description>&lt;p class="TulisanKeren"&gt;By Default di Entity Framework 4 (EF) Lazy Loading adalah enabled.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;So, ketika kita meng-create Model, maka setting Lazy Loading akan bernilai true, kita bisa melihatnya di Model Properties.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Dengan setting Lazy Loading enabled maka process load Navigation Properties (Entity Collection or Entity Reference) &lt;/p&gt;
&lt;p class="TulisanKeren"&gt;akan ditangguhkan.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Sebagai contoh misalkan kita create Model dari database Northwind.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Lalu misalkan kita punya kode seperti ini : &lt;/p&gt;

&lt;div class="csharpcode" style="overflow:auto;width:800px;border:thin;"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (var context = &lt;span class="kwrd"&gt;new&lt;/span&gt; NorthwindEntities())&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    context.ContextOptions.LazyLoadingEnabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    var sup = context.Suppliers.Where(s =&amp;gt; s.Products.Count &amp;gt; 4);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var s &lt;span class="kwrd"&gt;in&lt;/span&gt; sup)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Company : {0}&amp;quot;&lt;/span&gt;, s.CompanyName);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var p &lt;span class="kwrd"&gt;in&lt;/span&gt; s.Products)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;{0} - {1}&amp;quot;&lt;/span&gt;, p.ProductName, p.UnitPrice);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        Console.WriteLine();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p class="TulisanKeren"&gt;Maka EF akan mengirimkan beberapa  command ke database untuk di execute.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Command yang pertama adalah untuk meng-query Supplier yg products-nya &amp;gt; 4&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Sebagai hasil dari query ini, variabel sub akan berisi 2 supplier yg products-nya &amp;gt; 4&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Lalu command yang lainnya akan dikirim ke database dan diexecuted setiap kali program meng-query s.Products (Line 8).&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;So, dalam kasus diatas, sekali program berjalan akan ada 3 perjalanan ke database yang terjadi. Pertama untuk meng-query sup dan yg dua lagi untuk meng-query s.Products. Ini bisa kita lihat dengan SQL Profiler :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/123.jpg"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/123.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jika jumlah element sup hanya 2 supplier, maka itu mungkin tidak menjadi soal untuk melakukan 2 kali perjalan tambahan bolak-balik ke database. Tetapi bayangkan apabila dari hasil query sup tersebut menghasilkan lebih banyak element, misalkan 100 Supplier mempunyai jumlah products &amp;gt; 4. Maka akan ada 100 perjalanan tambahan bolak-balik ke database yg terjadi pada waktu kita meng-iterasi melalui foreach.
&lt;/p&gt;&lt;p class="TulisanKeren"&gt;So, pada kasus-kasus tertentu Lazy Loading mungkin akan menjadi opsi yang kurang mantap karena bisa menurunkan performa(banyak perjalanan bolak-balik ke database).&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Pada kasus diatas kita bisa mengatasi ini dengan men-disable Lazy Loading dengan men-set Lazy Loading to False.&lt;/p&gt;
&lt;pre style="font-family:Courier New;font-size:13;color:black;background:white;"&gt;&lt;font size="2"&gt;context.ContextOptions.LazyLoadingEnabled&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/font&gt;  &lt;/pre&gt;
&lt;p class="TulisanKeren"&gt;Lalu kita bisa melakukan Eager Load pada Entity Collection Products dengan menggunakan method Include dari class ObjectQuery like this :&lt;/p&gt;
&lt;pre style="font-family:Courier New;font-size:13;color:black;background:white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;sup&amp;nbsp;=&amp;nbsp;context.Suppliers.Include(&lt;span style="color:#a31515;"&gt;&amp;quot;Products&amp;quot;&lt;/span&gt;).Where(s&amp;nbsp;=&amp;gt;&amp;nbsp;s.Products.Count&amp;nbsp;&amp;gt;&amp;nbsp;4);&lt;/font&gt;&lt;/pre&gt;
&lt;p class="TulisanKeren"&gt;Dengan demikian maka Command yang dikirim kedatabase hanya 1 kali saja (1 kali perjalan bolak balik ke database). Yaitu waktu kita meng-query sup maka Command yang dibentuk oleh ObjectQuery juga akan meng-query Products, yang menghasilkan lebih banyak data yang dikirim balik(data yang berisi suppliers dan products). Tetapi ini masih lebih menguntungkan dari pada harus melakukan perjalan bolak-balik yang berlebihan ke database.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/30/lazy-loading-di-entity-framework-4.aspx&amp;amp;subject=Lazy Loading di Entity Framework 4" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/30/lazy-loading-di-entity-framework-4.aspx&amp;amp;t=Lazy+Loading+di+Entity+Framework+4" target="_blank" title="Submit Lazy Loading di Entity Framework 4 to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/30/lazy-loading-di-entity-framework-4.aspx&amp;amp;title=Lazy+Loading+di+Entity+Framework+4" target="_blank" title="Submit Lazy Loading di Entity Framework 4 to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/30/lazy-loading-di-entity-framework-4.aspx&amp;amp;phase=2" target="_blank" title="Submit Lazy Loading di Entity Framework 4 to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/30/lazy-loading-di-entity-framework-4.aspx&amp;amp;title=Lazy+Loading+di+Entity+Framework+4" target="_blank" title="Add Lazy Loading di Entity Framework 4 to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192735" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/entity+framework/default.aspx">entity framework</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/lazy+loading/default.aspx">lazy loading</category></item><item><title>Sekilas tentang Garbage Collection dan Garbage Collector</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/14/sekilas-tentang-garbage-collection.aspx</link><pubDate>Tue, 14 Jun 2011 07:44:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192645</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192645</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192645</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/14/sekilas-tentang-garbage-collection.aspx#comments</comments><description>&lt;p&gt;Kemarin saya sempat menjawab pertanyaan di forum sebelah tentang Garbage Collection.&lt;/p&gt;&lt;p&gt;Dan saya ingin men-sharenya disini, mana tau berguna hehehe... :&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;font color="#3366FF"&gt;&lt;font&gt;&lt;font color="#000000"&gt;Pertanyaan :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#3366FF"&gt;&lt;i&gt;permisi para sesepuh sekalian.&lt;br /&gt;
saya ada hal yang agak ragu nih tentang Java.&lt;br /&gt;
yaitu mengenai &amp;quot;Garbage Collector&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Garbage Collector ini dikatakan ada di Java yang berguna untuk mendestroy Object yang sudah terbuat.&lt;br /&gt;
&lt;br /&gt;
nah kalau setau saya, contoh seperti di bahasa Pemrograman C++, tidak 
ada yang namanya Garbage Collector. yang ada hanya Desctructor(~).&lt;br /&gt;
Di C++, Destructor dapat dipanggil oleh user untuk menghancurkan Object 
yang sudah tidak terpakai yaitu dengan menggunakan keyword delete pada 
pointer yang menunjuk suatu objek.&lt;br /&gt;
&lt;br /&gt;
Pertanyaan saya di sini,&lt;b&gt; Bagaimanakah cara kerja Garbage Collector tersebut?&lt;/b&gt;&lt;br /&gt;
karena di Java tidak ada yang namanya Destructor, sehingga tidak dapat menghapus objek sesuai dengan keinginan user.&lt;br /&gt;
&lt;br /&gt;
Banyak juga yang mengatakan bahwa Garbage Collector lah yang menghapus Object yang telah tidak dipakai secara otomatis.&lt;br /&gt;
Nah Otomatisnya itu pas kapan yah?&lt;br /&gt;
apakah pada saat Program di Terminate?&lt;br /&gt;
kalau pada saat Program di Terminate, nampaknya masalah Boros Memory 
tidak akan teratasi apabila Object akan di hapus pada saat terakhir 
program di terminate. pastinya program yang selalu full dijalankan terus
 akan sering terjadi Down krna memory yang berlebihan.&lt;br /&gt;
&lt;br /&gt;
Menurut Asumsi saya, Garbage Collector dijalankan pada saat &lt;b&gt;suatu object tidak di tunjuk oleh satupun Object Reference&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Contohnya:&lt;br /&gt;
&lt;br /&gt;
class Manusia&lt;br /&gt;
{&lt;br /&gt;
    public Manusia()&lt;br /&gt;
    {&lt;br /&gt;
         System.out.println(&amp;quot;Manusia terbentuk&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Program&lt;br /&gt;
{&lt;br /&gt;
    public static void main(String[]args)&lt;br /&gt;
    {&lt;br /&gt;
         Manusia man;&lt;br /&gt;
         man = new Manusia();//membuat objek pertama(sebut saja objek ke 1) yang ditunjuk oleh Object Reference man.&lt;br /&gt;
         man = new Manusia();//membuat objek kedua(sebut saja objek ke 2) yang ditunjuk lagi oleh Object Reference man.&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
jadi pada saat Object Reference man telah menunjuk objek kedua. maka 
objek pertama tidak ada yang dapat mengaksesnya. bisa di bilang dia 
telah tidak dapat digunakan lagi. &lt;br /&gt;
kalau asumsi saya pada saat seperti inilah Garbage Collector aktif untuk menghapus objek ke 1 pada saat itu juga.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;kira-kira Asumsi saya ini bener apa tidak??&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Mohon Pencerahannya dari para sesepuh. . .&lt;br /&gt;
kalau bisa sih &lt;b&gt;dijawab dari pendapat sesepuh dan juga disertakan link yang cukup memberikan informasi. . &lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Terima kasih.&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Jawaban :&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sebelumnya saya ingin mencoba menjawab secara singkat. Tapi ini adalah 
hanya berdasarkan pengetahuan saya tentang Garbage Collector di C#. Yang
 saya rasa kurang lebih sama dengan fungsi Garbage Collector di Java.&lt;br /&gt;
&lt;br /&gt;
C# atau Java disebut sebagai Managed Language. Karena kita tidak perlu 
berurusan langsung dengan proses pembebasan memory seperti di C. 
Semuanya dilaksanakan otomatis oleh CLR di C# atau JRE di Java.&lt;br /&gt;
CLR : Common Language Runtime&lt;br /&gt;
JRE : Java Runtime Environment&lt;br /&gt;
&lt;br /&gt;
Yang menjadi pertanyaan adalah bagaimanakah CLR  melakukan pembebasan memory?&lt;br /&gt;
&lt;br /&gt;
Singkatnya, CLR punya yang namanya suatu mekanisme Garbage Collection. 
Yaitu bisa diartikan sebagai proses pengumpulan sampah. Sampah yang 
dimaksud disini tentu saja object yang sudah tidak diperlukan lagi 
didalam aplikasi (misalnya, object yang sudah di-null-kan).&lt;br /&gt;
&lt;br /&gt;
Garbage Collection itu adalah suatu mekanisme yang dilaksanakan dengan 
algoritma tersendiri untuk melacak state dari object(object masih 
terpakai atau tidak) dan untuk melakukan penghapusan object.&lt;br /&gt;
&lt;br /&gt;
Garbage Collection terus berlangsung selama program kita berjalan. Pada 
saat-saat tertentu Garbage Collection akan melakukan pencatatan state 
dari suatu object. Dan apabila object tersebut sudah tidak terpakai 
lagi(misalnya tidak ada variabel yang merujuk kepada object tersebut) 
maka object ini kemudian akan dianggap sampah dan apabila program 
memerlukan memory tambahan maka object tersebut akan dihapus dan 
memory-nya dibebaskan. Yang melaksanakan semua mekanisme ini disebut 
sebagai Garbage Collector(Istilah lainnya Garbage Collector adalah 
sebuah bagian dari CLR yang menjalankan mekanisme Garbage Collection).&lt;br /&gt;
&lt;br /&gt;
Jadi pada C#, object yang di-null-kan tidak langsung dihapus dari 
memory. Itu semua terserah dari Garbage Collector dan bagaimana 
Algoritma Garbage Collection itu dilaksanakan. &lt;br /&gt;
&lt;br /&gt;
So, Kita tidak tau secara pasti kapan suatu object dihapus dari memory, 
tetapi ada suatu keadaan dimana, ketika object dihapus dari memory dan 
kita ingin program kita melaksanakan sesuatu. Untuk itu maka C# punya 
yang namanya Destructor. &lt;br /&gt;
Destructor di C# tidak lebih dari sebuah method yang akan dipanggil oleh
 CLR sesaat sebelum object dihapus dari memory. Makanya Destructor di C#
 namanya harus didahului dengan tanda ~, misalnya ~SomeClass. Tujuannya 
supaya program kita tidak bisa memanggil Destructor secara langsung. 
Jadi Destructor di C# bisa dikatakan sangat berbeda dengan destructor di
 C. Oleh karena itu Destructor di C# disebut juga Finalize Method.&amp;nbsp;
                
                
		&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Pertanyaan :&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;font color="#3366FF"&gt;gw selama ngoding c# ga pernah manggil destructor deh..&lt;br /&gt;
kira2 kasus kyk gmn ya perlu manggil destructor?&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Jawaban :&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Kalau misalnya agan coding pakai C#, ketika agan implement interface IDisposable agan harus manggil destructor. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/14/sekilas-tentang-garbage-collection.aspx&amp;amp;subject=Sekilas tentang Garbage Collection dan Garbage Collector" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/14/sekilas-tentang-garbage-collection.aspx&amp;amp;t=Sekilas+tentang+Garbage+Collection+dan+Garbage+Collector" target="_blank" title="Submit Sekilas tentang Garbage Collection dan Garbage Collector to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/14/sekilas-tentang-garbage-collection.aspx&amp;amp;title=Sekilas+tentang+Garbage+Collection+dan+Garbage+Collector" target="_blank" title="Submit Sekilas tentang Garbage Collection dan Garbage Collector to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/14/sekilas-tentang-garbage-collection.aspx&amp;amp;phase=2" target="_blank" title="Submit Sekilas tentang Garbage Collection dan Garbage Collector to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/06/14/sekilas-tentang-garbage-collection.aspx&amp;amp;title=Sekilas+tentang+Garbage+Collection+dan+Garbage+Collector" target="_blank" title="Add Sekilas tentang Garbage Collection dan Garbage Collector to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192645" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/Garbage+Collection/default.aspx">Garbage Collection</category></item><item><title>Kesalahan pada keyword lock</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/05/01/kesalahan-pada-keyword-lock.aspx</link><pubDate>Sun, 01 May 2011 13:19:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192485</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192485</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192485</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/05/01/kesalahan-pada-keyword-lock.aspx#comments</comments><description>&lt;p&gt;&lt;span class="TulisanKeren"&gt;Untuk melakukan sinkronisasi terhadap thread, C# mempunyai&lt;b&gt; lock keyword&lt;/b&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Keyword lock sebenarnya  merupakan &lt;b&gt;shorthand notation dari Try Finally block&lt;/b&gt;.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;So, ketika compiler membaca code yang terdapat lock keyword, maka compiler akan menerjemahkannya menjadi seperti kode dibawah :&lt;/p&gt;

&lt;div class="csharpcode" style="overflow:auto;width:800px;border:outset;"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt; Boolean lockTaken = &lt;span class="kwrd"&gt;false&lt;/span&gt;; &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;   &lt;span class="kwrd"&gt;try&lt;/span&gt; { &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;      Monitor.Enter(&lt;span class="kwrd"&gt;&lt;/span&gt;key, &lt;span class="kwrd"&gt;ref&lt;/span&gt; lockTaken); &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;      &lt;span class="rem"&gt;// This code has exclusive access to the data... &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;   } &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;   &lt;span class="kwrd"&gt;finally&lt;/span&gt; { &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (lockTaken) Monitor.Exit(key&lt;span class="kwrd"&gt;&lt;/span&gt;); &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;   }&lt;/pre&gt;
&lt;/div&gt;
&lt;p class="TulisanKeren"&gt;Tetapi sebenarnya &lt;b&gt;ada suatu masalah dengan penggunaan keyword lock.&lt;/b&gt;&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Untuk lebih jelasnya kita perhatikan kode di bawah ini :&lt;/p&gt;

&lt;div class="csharpcode" style="overflow:auto;width:800px;border:groove;"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; key = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] data = { &lt;span class="str"&gt;&amp;quot;Joni&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Pria&amp;quot;&lt;/span&gt; };&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;   &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateData(&lt;span class="kwrd"&gt;object&lt;/span&gt; Nama, &lt;span class="kwrd"&gt;object&lt;/span&gt; Kelamin)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        data[0] = Nama;        &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        data[1] = Kelamin;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AccessData(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;object&lt;/span&gt;[] objects = (&lt;span class="kwrd"&gt;object&lt;/span&gt;[])&lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;lock&lt;/span&gt;(key)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            {                &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                &lt;span class="kwrd"&gt;int&lt;/span&gt; left = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)objects[0];&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                &lt;span class="kwrd"&gt;int&lt;/span&gt; top = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)objects[1];&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                Console.SetCursorPosition(left, top);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                Console.WriteLine(&lt;span class="str"&gt;&amp;quot;ThreadID:{0} Read || Nama = {1}, Kelamin = {2}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                    Thread.CurrentThread.ManagedThreadId, data[0], data[1]);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                UpdateData(objects[2], objects[3]);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            }            &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            MessageBox.Show(ex.Message);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        ThreadPool.QueueUserWorkItem(AccessData, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { 0, 0, &lt;span class="str"&gt;&amp;quot;Susi&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Wanita&amp;quot;&lt;/span&gt; });&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        ThreadPool.QueueUserWorkItem(AccessData, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { 0, 2, &lt;span class="str"&gt;&amp;quot;Sule&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Pria&amp;quot;&lt;/span&gt; });            &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        Console.ReadLine();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p class="TulisanKeren"&gt;Pada kode diatas terdapat dua buah &lt;b&gt;ThreadPool Thread&lt;/b&gt; yang keduanya sama-sama mengakses 1 method yang sama yaitu &lt;b&gt;method AccessData&lt;/b&gt; (lihat baris 35 dan 36) dalam waktu yang hampir bersamaan.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Ketika memasuki method AccessData setiap ThreadPool Thread akan membaca dan mengupdate &lt;b&gt;field data (&lt;/b&gt;baris 22 dan baris 25&lt;b&gt;)&lt;/b&gt; dari &lt;b&gt;class Program&lt;/b&gt; dengan memanggil &lt;b&gt;method UpdateData&lt;/b&gt;.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;So, ketika kode diatas dijalankan output yang ditampilkan adalah sebagi berikut :&lt;/p&gt;
&lt;p&gt;&lt;span class="MyCodeText"&gt;ThreadID:10 Read || Nama = Joni, Kelamin = Pria&lt;br /&gt;
ThreadID:11 Read || Nama = Susi, Kelamin = Wanita&lt;/span&gt;&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Ketika mengakses method AccessData Thread 10 akan membaca dari &lt;b&gt;field data&lt;/b&gt; yang berisi nama &amp;quot;Joni&amp;quot; dan kelamin &amp;quot;Pria&amp;quot;.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Setelah itu Thread 10 akan mengupdate&lt;b&gt; field data&lt;/b&gt; dengan nama &amp;quot;Susi&amp;quot; dan kelamin &amp;quot;Wanita&amp;quot;. &lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Setelah Thread 10 selesai, maka Thread 11 akan mengakses method AccessData dan kemudian membaca dari&lt;b&gt; field data&lt;/b&gt; yang berisi nama &amp;quot;Susi&amp;quot; dan kelamin &amp;quot;Wanita. &lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Setelah itu Thread 11 akan mengupdate&lt;b&gt; field data&lt;/b&gt; dengan nama &amp;quot;Sule&amp;quot; dan kelamin &amp;quot;Pria&amp;quot;.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;&lt;b&gt;Yang menjadi masalah adalah&lt;/b&gt; apa yang terjadi ketika Thread 10 mengupdate data tetapi sebelum selesai mengupdate data kemudian terjadi suatu Exception (terjadi exception dimethod UpdateData).&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Untuk mensimulasikannya bisa dengan menambahkan keword throw didalam method UpdateData :&lt;/p&gt;

&lt;div class="csharpcode" style="overflow:auto;width:800px;border:groove;"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateData(&lt;span class="kwrd"&gt;object&lt;/span&gt; Nama, &lt;span class="kwrd"&gt;object&lt;/span&gt; Kelamin)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    data[0] = Nama;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ApplicationException(&lt;span class="str"&gt;&amp;quot;Update Data Failed&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    data[1] = Kelamin;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p class="TulisanKeren"&gt;Yang terjadi adalah, Thread 11 akan membaca data yang salah. Seperti terlihat dalam output berikut :&lt;/p&gt;
&lt;p class="MyCodeText"&gt;ThreadID:10 Read || Nama = Joni, Kelamin = Pria&lt;br /&gt;
ThreadID:11 Read || &lt;b&gt;Nama = Susi&lt;/b&gt;, Kelamin = Pria&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Itu disebabkan karena ketika Thread 10 selesai meng-throw sebuah Exception (line 4) kemudian Thread 10 akan kembali ke method AccesData dan akan mengeksekusi &lt;b&gt;Finally block&lt;/b&gt; dari &lt;b&gt;keyword lock&lt;/b&gt; (source code paling atas, line 6) yang didalamnya berisi pemanggilan method &lt;b&gt;Monitor.Exit(key)&lt;/b&gt;. Yang berakibat key dilepas dan karena itu Thread 11 bisa memperoleh key dan memperoleh akses untuk membaca &lt;b&gt;field data&lt;/b&gt;(yang datanya kita anggap corrupt karena Nama berhasil diupdate tetapi Kelamin masih belum terupdate, seperti terlihat dalam output diatas).&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;So, untuk mengatasi ini maka &lt;b&gt;lebih baik untuk tidak menggunakan keyword lock&lt;/b&gt; dan &lt;b&gt;lebih baik kita secara explisit menggunakan class Monitor&lt;/b&gt;. Seperti terlihat dalam code berikut :&lt;/p&gt;

&lt;div class="csharpcode" style="overflow:auto;width:800px;border:groove;"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AccessData(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;object&lt;/span&gt;[] objects = (&lt;span class="kwrd"&gt;object&lt;/span&gt;[])&lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;b&gt;Monitor.Enter(key);&lt;/b&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; left = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)objects[0];&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; top = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)objects[1];&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            Console.SetCursorPosition(left, top);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;ThreadID:{0} Read || Nama = {1}, Kelamin = {2}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                Thread.CurrentThread.ManagedThreadId, data[0], data[1]);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            UpdateData(objects[2], objects[3]);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            &lt;b&gt;Monitor.Exit(key);&lt;/b&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            MessageBox.Show(ex.Message);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;p class="TulisanKeren"&gt;Dengan menggunakan Class Monitor, maka ketika terjadi exception pada waktu Thread 10 mengeksekusi method UpdateData, Thread 10 akan berhenti (ter-block) sehingga method &lt;b&gt;Monitor.Exit&lt;/b&gt; tidak ter-eksekusi yang mengakibatkan &lt;b&gt;key&lt;/b&gt; tidak direlease. Sehingga &lt;b&gt;Thread 11&lt;/b&gt; tidak memperoleh akses untuk membaca &lt;b&gt;field data&lt;/b&gt;.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;So, sekali lagi. &lt;b&gt;Lebih baik menggunakan Monitor class secara explisit&lt;/b&gt; dari pada menggunakan keyword lock. Karena exception bisa saja terjadi didalam block kode lock.&lt;/p&gt;
&lt;p class="TulisanKeren"&gt;Dan karena keyword lock merupakan shorthand notation  &lt;b&gt;Try Finally block&lt;/b&gt;, maka &lt;b&gt;Finally block&lt;/b&gt; yang berisi kode untuk merilis key akhirnya pasti akan dieksekusi. Sehingga key terlepas dan Thread lain bisa memperoleh akses didalam &lt;b&gt;block lock&lt;/b&gt; (source code paling atas, line 4) yang mengakibatkan Thread lain tersebut membaca data yang corrupt.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/05/01/kesalahan-pada-keyword-lock.aspx&amp;amp;subject=Kesalahan pada keyword lock" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/05/01/kesalahan-pada-keyword-lock.aspx&amp;amp;t=Kesalahan+pada+keyword+lock" target="_blank" title="Submit Kesalahan pada keyword lock to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/05/01/kesalahan-pada-keyword-lock.aspx&amp;amp;title=Kesalahan+pada+keyword+lock" target="_blank" title="Submit Kesalahan pada keyword lock to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/05/01/kesalahan-pada-keyword-lock.aspx&amp;amp;phase=2" target="_blank" title="Submit Kesalahan pada keyword lock to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/05/01/kesalahan-pada-keyword-lock.aspx&amp;amp;title=Kesalahan+pada+keyword+lock" target="_blank" title="Add Kesalahan pada keyword lock to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192485" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/Threading/default.aspx">Threading</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/lock/default.aspx">lock</category></item><item><title>Perbedaan call dan callvirt (Bagaimana CLR memanggil method)</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/27/perbedaan-call-dan-callvirt.aspx</link><pubDate>Wed, 27 Apr 2011 05:29:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192475</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192475</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192475</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/27/perbedaan-call-dan-callvirt.aspx#comments</comments><description>&lt;span class="MyDefaultText"&gt;
&lt;p&gt;Pada postingan kali ini saya ingin membahas tentang perbedaan call dan callvirt pada pemanggilan Method.&lt;/p&gt;&lt;p&gt;Dengan tujuan untuk mengetahui bagaimana sebenarnya CLR bertingkah laku ketika memanggil method. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Disini kita akan menggunakan dua buah class, yaitu Base yang mempunyai sebuah method &lt;b&gt;SomeMethod&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;dan class Derived yang merupakan turunan dari class Base.&lt;/p&gt;

&lt;div class="csharpcode" style="overflow:auto;height:356px;width:564px;"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; First&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; counter = 0;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SomeMethod(&lt;span class="kwrd"&gt;int&lt;/span&gt; max)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;{0} - First.SomeMethod&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (counter != max) SomeMethod(max);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;}&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Second : First&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SomeMethod(&lt;span class="kwrd"&gt;int&lt;/span&gt; max)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;{0} - Second.SomeMethod&amp;quot;&lt;/span&gt;, ++counter);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;base&lt;/span&gt;.SomeMethod(max);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        Second s = &lt;span class="kwrd"&gt;new&lt;/span&gt; Second();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        s.SomeMethod(9);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        Console.ReadLine();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Pada line 7 dan 15 &lt;b&gt;First.SomeMethod&lt;/b&gt; akan dipanggil oleh CLR. &lt;/p&gt;
&lt;p&gt;Disini CLR akan memperlakukan 2 pemanggilan tersebut dengan cara yang berbeda.&lt;br /&gt;
  &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;pada line 15 &lt;b&gt;Second.SomeMethod&lt;/b&gt; akan memanggil &lt;b&gt;First.SomeMethod&lt;/b&gt; menggunakan sintax &amp;quot;&lt;b&gt;&lt;i&gt;&lt;u&gt;base.SomeMethod(max)&lt;/u&gt;&lt;/i&gt;&amp;quot;&lt;/b&gt; &lt;/p&gt;&lt;p&gt;yang mana First.SomeMethod akan dipanggil &lt;b&gt;tidak secara virtual &lt;/b&gt;oleh CLR, ini bisa kita lihat pada IL code yang dihasilkan : &lt;/p&gt;
&lt;p&gt;&lt;span class="MyILCodeText"&gt;L_0024: &lt;b&gt;call&lt;/b&gt; instance void First::SomeMethod(int32)&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Disini CLR akan memanggil SomeMethod yang ada pada First class tanpa mengecek apakah First.SomeMethod telah di override&lt;/p&gt;
&lt;p&gt;oleh class turunannya.&lt;br /&gt;
  &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt; pada line 7 &lt;b&gt;First.SomeMethod&lt;/b&gt; akan memanggil dirinya sendiri (recursive&lt;b&gt;) &lt;/b&gt;menggunakan sintax&lt;b&gt; &lt;i&gt;&amp;quot;&lt;u&gt;SomeMethod(max)&lt;/u&gt;&amp;quot;&lt;/i&gt;&lt;/b&gt; &lt;/p&gt;&lt;p&gt;yang mana First.SomeMethod akan dipanggil &lt;b&gt;secara virtual &lt;/b&gt;oleh CLR, ini bisa kita lihat pada IL code yang dihasilkan :&lt;/p&gt;
&lt;p class="MyILCodeText"&gt;L_0020: &lt;b&gt;callvirt&lt;/b&gt; instance void First::SomeMethod(int32)&lt;/p&gt;
&lt;p&gt;Ketika SomeMethod dipanggil secara virtual maka CLR akan memanggil SomeMethod yang ada pada First class.&lt;/p&gt;
&lt;p&gt;Lalu kemudian CLR akan mengecek apakah SomeMethod telah dioverride oleh class turunannya, jika iya maka SomeMethod&lt;/p&gt;
&lt;p&gt;pada class turunannya yang akan di panggil (Second.SomeMethod)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pemanggilan method secara virtual (callvirt) terjadi pada instance method yang kita deklarasikan &lt;b&gt;sebagai virtual&lt;/b&gt;. &lt;/p&gt;&lt;p&gt;Pada instance method yang&lt;b&gt; tidak dideklarasikan sebagai virtual&lt;/b&gt; maka pemanggilan method tetap akan terjadi secara virtual (callvirt).&lt;/p&gt;&lt;p&gt;Tetapi, pemanggilan virtual disini hanya untuk mengecek apakah instance dari class yang mendeklarasikan method tersebut sudah&amp;nbsp;&lt;/p&gt;&lt;p&gt;dicreate atau tidak (dengan kata lain untuk mengecek object null atau tidak) tetapi tidak mengecek apakah method tersebut di override atau tidak. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sedangkan pada &lt;b&gt;static method&lt;/b&gt;, method akan selalu di panggil langsung, tidak secara virtual. &lt;/p&gt;&lt;p&gt;Dan jika memanggil method menggunakan &lt;b&gt;keyword&lt;/b&gt; &lt;b&gt;base (&lt;/b&gt;seperti pada line 15&lt;b&gt;)&lt;/b&gt; maka method juga akan di panggil langsung, tidak secara virtual.&lt;/p&gt;&lt;p&gt;Kalau misalnya memanggil method dengan &lt;span class="MyDefaultText"&gt;&lt;b&gt;keyword&lt;/b&gt; &lt;b&gt;base (&lt;/b&gt;seperti pada line 15&lt;b&gt;) di panggil secara virtual(callvirt) &lt;/b&gt;maka SomeMethod pada&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Second class akan dipanggil berulang-ulang yang menyebabkan &lt;b&gt;stack over flow.&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, yang bisa kita ambil disini adalah, pendeklarasian method &lt;b&gt;sebagai virtual&lt;/b&gt; akan membuat pemanggilan method lebih lama.&lt;/p&gt;&lt;p&gt;Karena CLR akan bekerja dua kali :&lt;/p&gt;&lt;p&gt;yaitu untuk mengecek apakah object null atau tidak, lalu untuk mengecek apakah method tersebut sudah di override atau tidak.&lt;br /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Itulah perbedaan antara call dan callvirt yang mengatur bagaimana CLR memanggil suatu method.&lt;/p&gt;&lt;p&gt;Kalau kita  mengerti bagaimana tingkah laku dari CLR maka kita bisa menerapkannya untuk membuat aplikasi kita lebih&lt;/p&gt;
&lt;p&gt;fleksibel. Seperti yang di praktekkan pada code diatas yang melakukan pemanggilan recursive (seperti pada line 15) tetapi selalu diakhiri dengan pemanggilan&lt;/p&gt;&lt;p&gt;method pada class turunannya (Second.SomeMethod). &lt;/p&gt;&lt;p&gt;&lt;b&gt;output program :&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/Untitled1.jpg"&gt;&lt;/a&gt;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/Untitled1.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/Untitled1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/27/perbedaan-call-dan-callvirt.aspx&amp;amp;subject=Perbedaan call dan callvirt (Bagaimana CLR memanggil method)" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/27/perbedaan-call-dan-callvirt.aspx&amp;amp;t=Perbedaan+call+dan+callvirt+(Bagaimana+CLR+memanggil+method)" target="_blank" title="Submit Perbedaan call dan callvirt (Bagaimana CLR memanggil method) to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/27/perbedaan-call-dan-callvirt.aspx&amp;amp;title=Perbedaan+call+dan+callvirt+(Bagaimana+CLR+memanggil+method)" target="_blank" title="Submit Perbedaan call dan callvirt (Bagaimana CLR memanggil method) to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/27/perbedaan-call-dan-callvirt.aspx&amp;amp;phase=2" target="_blank" title="Submit Perbedaan call dan callvirt (Bagaimana CLR memanggil method) to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/27/perbedaan-call-dan-callvirt.aspx&amp;amp;title=Perbedaan+call+dan+callvirt+(Bagaimana+CLR+memanggil+method)" target="_blank" title="Add Perbedaan call dan callvirt (Bagaimana CLR memanggil method) to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192475" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/callvirt/default.aspx">callvirt</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/CLR/default.aspx">CLR</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/call/default.aspx">call</category></item><item><title>base dan this adalah object yang sama, not different</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/15/base-dan-this-adalah-object-yang-sama.aspx</link><pubDate>Fri, 15 Apr 2011 03:16:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192425</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192425</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192425</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/15/base-dan-this-adalah-object-yang-sama.aspx#comments</comments><description>&lt;p&gt;&lt;font size="2"&gt;Bagi yang belum tau sebenarnya kalau &lt;b&gt;base&lt;/b&gt; dan&lt;b&gt; this&lt;/b&gt; itu adalah &lt;b&gt;mengacu pada object yang sama.&lt;/b&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;So, postingan kali ini ingin menunjukkan hal tersebut.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;OK, perhatikan kode dibawah ini :&lt;/font&gt;&lt;/p&gt;&lt;pre style="font-family:Courier New;font-size:13;color:black;background:white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Base&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt;&amp;nbsp;This;&amp;nbsp;&amp;nbsp;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Alamat&amp;nbsp;Base&amp;nbsp;kita&amp;nbsp;simpan&amp;nbsp;didalam&amp;nbsp;Base.This&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;Base()&amp;nbsp;{&amp;nbsp;This&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;this&lt;/span&gt;;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}
&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Base&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt;&amp;nbsp;BaseAddress;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;Derived()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Alamat&amp;nbsp;Derived&amp;nbsp;kita&amp;nbsp;simpan&amp;nbsp;didalam&amp;nbsp;Derived.This&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;this&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BaseAddress&amp;nbsp;=&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Base&lt;/span&gt;.This;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
 
&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Program&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt;&amp;nbsp;d&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt;();
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Cek&amp;nbsp;apakah&amp;nbsp;isi&amp;nbsp;variable&amp;nbsp;d&amp;nbsp;dan&amp;nbsp;Derived.ThisAddress&amp;nbsp;sama&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Are d&amp;nbsp;and&amp;nbsp;Derived.ThisAddress&amp;nbsp;same&amp;nbsp;?&amp;nbsp;:&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;(d&amp;nbsp;==&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt;.This));
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Cek&amp;nbsp;apakah&amp;nbsp;base&amp;nbsp;dan&amp;nbsp;this&amp;nbsp;sama&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Are&amp;nbsp;base&amp;nbsp;and&amp;nbsp;this&amp;nbsp;same&amp;nbsp;?&amp;nbsp;:&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;(&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt;.BaseAddress&amp;nbsp;==&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt;.This));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadLine();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/font&gt;&lt;/pre&gt;&lt;p&gt;&lt;font size="2"&gt;Pada kode diatas, kita menyimpan alamat dari &lt;b&gt;base&lt;/b&gt; pada &lt;b&gt;Base.This&lt;/b&gt; lalu kita simpan kembali ke &lt;b&gt;Derived.BaseAddress.&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Lalu alamat dari Derived &lt;b&gt;(this)&lt;/b&gt; kita simpan pada&lt;b&gt; Derived.This&lt;/b&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Dan untuk membuktikan bahwa &lt;b&gt;base&lt;/b&gt; dan &lt;b&gt;this &lt;/b&gt;adalah mengacu pada object yang sama, kita mempergunakan static class Program.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Dan apabila Program di jalankan akan menampilkan bahwa &lt;b&gt;base&lt;/b&gt; dan&lt;b&gt; this&lt;/b&gt; mengacu pada object yang sama. &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Jadi dari sini dapat kita analisa bahwa pada saat object Derived diinisialisasi, &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;maka struktur data dari Base dibuat dahulu oleh CLR, kemudian CLR membahkan struktur data Derived kedalam struktur data&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;dari Base, itulah sebabnya ketika&amp;nbsp; kita menginisialisasi Derived kita juga harus menginisialisasi Base dengan cara memanggil constructor&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;dari Base(Walaupun pada kode diatas kita tidak melakukannya karena telah dilakukan secara implisit oleh CLR) . So, intinya ketika kita&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;meng-create object Derived sebenarnya itu hanyalah terdiri dari satu object yaitu Derived saja dan bukan Base dan Derived.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;Jadi, kalau misalnya ada kode seperti ini pada Base :&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;Base&lt;/span&gt;
{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;event&lt;/span&gt;&amp;nbsp;&lt;span&gt;EventHandler&lt;/span&gt;&amp;nbsp;SameNumbers;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span&gt;Random&lt;/span&gt;&amp;nbsp;rnd&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;Random&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;key&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;?&amp;nbsp;cache&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;SetScrambler(&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;left,&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;top)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;lock&lt;/span&gt;&amp;nbsp;(key)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Thread&lt;/span&gt;.Sleep(50);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;?&amp;nbsp;temp&amp;nbsp;=&amp;nbsp;rnd.Next(0,&amp;nbsp;100);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.SetCursorPosition(left,&amp;nbsp;top);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.Write(temp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&amp;nbsp;(temp&amp;nbsp;==&amp;nbsp;cache)&amp;nbsp;OnSameNumbers(&lt;span&gt;EventArgs&lt;/span&gt;.Empty);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;else&lt;/span&gt;&amp;nbsp;cache&amp;nbsp;=&amp;nbsp;temp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;ScramblerGo()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;ThreadPool&lt;/span&gt;.QueueUserWorkItem(arg&amp;nbsp;=&amp;gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color:blue;"&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;true&lt;/span&gt;)&amp;nbsp;SetScrambler(0,&amp;nbsp;0);&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;ThreadPool&lt;/span&gt;.QueueUserWorkItem(arg&amp;nbsp;=&amp;gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color:blue;"&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;true&lt;/span&gt;)&amp;nbsp;SetScrambler(4,&amp;nbsp;0);&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;font size="2"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;OnSameNumbers(&lt;span&gt;EventArgs&lt;/span&gt;&amp;nbsp;e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;EventHandler&lt;/span&gt;&amp;nbsp;temp&amp;nbsp;=&amp;nbsp;SameNumbers;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&amp;nbsp;(temp&amp;nbsp;!=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;nbsp;temp(&lt;span style="color:blue;"&gt;this&lt;/span&gt;,&amp;nbsp;e);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;&lt;b&gt;Lalu kita buat Derived dengan kode seperti ini :&lt;/b&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;Derived&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span&gt;Base&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;sealed&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;OnSameNumbers(&lt;span&gt;EventArgs&lt;/span&gt;&amp;nbsp;e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;MessageBox&lt;/span&gt;.Show(&lt;span&gt;&amp;quot;OnSameNumbers&amp;nbsp;:&amp;nbsp;Numbers&amp;nbsp;are&amp;nbsp;same...&amp;quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnSameNumbers(e);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;Sebenarnya pada kode &lt;b&gt;&lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnSameNumbers(e)&lt;/b&gt; diatas, Derived &lt;b&gt;mengacu pada struktur datanya sendiri.&lt;/b&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;Karena memang object &lt;b&gt;base&lt;/b&gt; itu dan object &lt;b&gt;this&lt;/b&gt; adalah object yang sama.&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;Jadi sekali lagi, intinya CLR hanya membuat &lt;b&gt;satu&lt;/b&gt; struktur data (object) yaitu object Derived saja&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;yang classnya bisa dijelaskan dengan &lt;b&gt;pseudocode&lt;/b&gt; berikut :&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;font-size:13;color:black;background:white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt; 
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;event&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;&amp;nbsp;SameNumbers;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dengan&amp;nbsp;catatan&amp;nbsp;:&amp;nbsp;fields&amp;nbsp;private&amp;nbsp;berikut&amp;nbsp;ini&amp;nbsp;ada(exist)&amp;nbsp;distruktur&amp;nbsp;data&amp;nbsp;dari&amp;nbsp;Derived&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//tetapi&amp;nbsp;tidak&amp;nbsp;bisa&amp;nbsp;diakses&amp;nbsp;dari&amp;nbsp;Derived&amp;nbsp;karena&amp;nbsp;diprivatekan&amp;nbsp;oleh&amp;nbsp;Base&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Random&lt;/span&gt;&amp;nbsp;rnd&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Random&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt;&amp;nbsp;key&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;?&amp;nbsp;cache&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;SetScrambler(&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;left,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;top)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;lock&lt;/span&gt;&amp;nbsp;(key)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.Sleep(50);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;?&amp;nbsp;temp&amp;nbsp;=&amp;nbsp;rnd.Next(0,&amp;nbsp;100);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.SetCursorPosition(left,&amp;nbsp;top);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.Write(temp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&amp;nbsp;(temp&amp;nbsp;==&amp;nbsp;cache)&amp;nbsp;OnSameNumbers(&lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt;.Empty);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;else&lt;/span&gt;&amp;nbsp;cache&amp;nbsp;=&amp;nbsp;temp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;ScramblerGo()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;ThreadPool&lt;/span&gt;.QueueUserWorkItem(arg&amp;nbsp;=&amp;gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color:blue;"&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;true&lt;/span&gt;)&amp;nbsp;SetScrambler(0,&amp;nbsp;0);&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;ThreadPool&lt;/span&gt;.QueueUserWorkItem(arg&amp;nbsp;=&amp;gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color:blue;"&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;true&lt;/span&gt;)&amp;nbsp;SetScrambler(4,&amp;nbsp;0);&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;font size="2"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;OnSameNumbers(&lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt;&amp;nbsp;e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(&lt;span style="color:#a31515;"&gt;&amp;quot;OnSameNumbers&amp;nbsp;:&amp;nbsp;Numbers&amp;nbsp;are&amp;nbsp;same...&amp;quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;&amp;nbsp;temp&amp;nbsp;=&amp;nbsp;SameNumbers;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&amp;nbsp;(temp&amp;nbsp;!=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;nbsp;temp(&lt;span style="color:blue;"&gt;this&lt;/span&gt;,&amp;nbsp;e);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&amp;nbsp;
}&lt;/font&gt;&lt;/pre&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;Itu sebabnya bila kita jalankan dengan static class Program berikut &lt;/b&gt;:&lt;/font&gt;&lt;/p&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;Program&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Derived&lt;/span&gt;&amp;nbsp;d&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;Derived&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d.SameNumbers&amp;nbsp;+=&amp;nbsp;(sender,&amp;nbsp;e)&amp;nbsp;=&amp;gt; &lt;span&gt;MessageBox&lt;/span&gt;.Show(&lt;span&gt;&amp;quot;In&amp;nbsp;Lambda&amp;nbsp;:&amp;nbsp;Numbers&amp;nbsp;are&amp;nbsp;same...&amp;quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d.ScramblerGo();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.ReadLine();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;Maka, &amp;quot;&lt;b&gt;&lt;span&gt;OnSameNumbers&amp;nbsp;:&amp;nbsp;Numbers&amp;nbsp;are&amp;nbsp;same...&lt;/span&gt;&lt;/b&gt;&amp;quot; akan tampil lebih dulu dari pada &lt;b&gt;&lt;span&gt;&amp;quot;In&amp;nbsp;Lambda&amp;nbsp;:&amp;nbsp;Numbers&amp;nbsp;are&amp;nbsp;same...&amp;quot;&lt;/span&gt;.&lt;/b&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;Karena memang pada kenyataannya pada class Derived &lt;b&gt;&lt;span&gt;&amp;quot;OnSameNumbers&amp;nbsp;:&amp;nbsp;Numbers&amp;nbsp;are&amp;nbsp;same...&amp;quot;&lt;/span&gt;&lt;/b&gt; ditampilkan terlebih&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;dahulu baru kemudian Event diRaise.&lt;/font&gt;&lt;font size="2"&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/15/base-dan-this-adalah-object-yang-sama.aspx&amp;amp;subject=base dan this adalah object yang sama, not different" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/15/base-dan-this-adalah-object-yang-sama.aspx&amp;amp;t=base+dan+this+adalah+object+yang+sama%2c+not+different" target="_blank" title="Submit base dan this adalah object yang sama, not different to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/15/base-dan-this-adalah-object-yang-sama.aspx&amp;amp;title=base+dan+this+adalah+object+yang+sama%2c+not+different" target="_blank" title="Submit base dan this adalah object yang sama, not different to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/15/base-dan-this-adalah-object-yang-sama.aspx&amp;amp;phase=2" target="_blank" title="Submit base dan this adalah object yang sama, not different to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/15/base-dan-this-adalah-object-yang-sama.aspx&amp;amp;title=base+dan+this+adalah+object+yang+sama%2c+not+different" target="_blank" title="Add base dan this adalah object yang sama, not different to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192425" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/base/default.aspx">base</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/this/default.aspx">this</category></item><item><title>Threading Model dan Synchronization Context</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/12/synchronization-context.aspx</link><pubDate>Tue, 12 Apr 2011 05:25:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192413</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192413</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192413</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/12/synchronization-context.aspx#comments</comments><description>&lt;p&gt;&lt;font size="2"&gt;Pada .Net Framework terdapat yang namanya &lt;b&gt;threading model&lt;/b&gt; yang terkait dengan suatu &lt;b&gt;application model.&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Contohnya ASP.Net Web Application mempunyai threading modelnya sendiri, sementara Windows Forms mempunyai threading&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;modelnya sendiri. &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Threading Model pada &lt;b&gt;Windows forms&lt;/b&gt; yaitu, &lt;b&gt;thread yang bisa meng-update state dari suatu control &lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;adalah thread yang telah meng-create control tersebut&lt;/b&gt;. Jadi&lt;b&gt; thread pool thread&lt;/b&gt; tidak di izinkan untuk untuk mengupdate state&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;dari suatu control. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Contohnya pada code di bawah ini, kita mempunya suatu method &lt;b&gt;ResponseToFunc&lt;/b&gt; yang akan di invoke ketika &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;thread pool thread &lt;/b&gt;selesai meng-invoke method targetnya si delegate(Func&amp;lt;Int32, Int32&amp;gt;).&lt;/font&gt;&lt;/p&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;sealed&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;MyForm&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span&gt;Form&lt;/span&gt;
{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span&gt;Func&lt;/span&gt;&amp;lt;&lt;span&gt;Int32&lt;/span&gt;,&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;gt;&amp;nbsp;func&amp;nbsp;=&amp;nbsp;arg&amp;nbsp;=&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;arg;&amp;nbsp;i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Thread&lt;/span&gt;.Sleep(300);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(&lt;span&gt;&amp;quot;Result&amp;nbsp;:&amp;nbsp;&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;(result&amp;nbsp;=&amp;nbsp;i));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;MyForm()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Main&amp;nbsp;Thread&amp;nbsp;men-set&amp;nbsp;state&amp;nbsp;dari&amp;nbsp;MyForm&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(&lt;span&gt;&amp;quot;Thread&amp;nbsp;Name&amp;nbsp;:&amp;nbsp;{0},&amp;nbsp;IsThreadPoolThread&amp;nbsp;:&amp;nbsp;{1}&amp;quot;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Thread&lt;/span&gt;.CurrentThread.Name,&amp;nbsp;&lt;span&gt;Thread&lt;/span&gt;.CurrentThread.IsThreadPoolThread);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Width&amp;nbsp;=&amp;nbsp;Height&amp;nbsp;=&amp;nbsp;400;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;ResponseToFunc(&lt;span&gt;IAsyncResult&lt;/span&gt; arg)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//ThreadPoolThread&amp;nbsp;mengeksekusi&amp;nbsp;method&amp;nbsp;ini&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(&lt;span&gt;&amp;quot;IsThreadPoolThread&amp;nbsp;:&amp;nbsp;&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span&gt;Thread&lt;/span&gt;.CurrentThread.IsThreadPoolThread);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;try&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;func.EndInvoke(arg);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(&lt;span&gt;&amp;quot;action&amp;nbsp;complete,&amp;nbsp;result&amp;nbsp;=&amp;nbsp;{0}&amp;quot;&lt;/span&gt;,&amp;nbsp;result);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Thread&amp;nbsp;Pool&amp;nbsp;Thread&amp;nbsp;tidak&amp;nbsp;diizinkan&amp;nbsp;untuk&amp;nbsp;mengupdate&amp;nbsp;state&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dari&amp;nbsp;suatu&amp;nbsp;control,&amp;nbsp;sehingga&amp;nbsp;kode&amp;nbsp;di&amp;nbsp;bawah&amp;nbsp;akan&amp;nbsp;menyebabkan&amp;nbsp;error.&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Text&amp;nbsp;=&amp;nbsp;&lt;span&gt;&amp;quot;func&amp;nbsp;complete&amp;quot;&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;catch&lt;/span&gt;&amp;nbsp;(&lt;span&gt;Exception&lt;/span&gt;&amp;nbsp;ex)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(ex.Message);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/b&gt;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;OnMouseClick(&lt;span&gt;MouseEventArgs&lt;/span&gt;&amp;nbsp;e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Text&amp;nbsp;=&amp;nbsp;&lt;span&gt;&amp;quot;Initial&amp;nbsp;Text&amp;quot;&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;func.BeginInvoke(5,&amp;nbsp;ResponseToFunc,&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnMouseClick(e);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Program&lt;/span&gt;
{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.Name&amp;nbsp;=&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;MainThread&amp;quot;&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MyForm&lt;/span&gt;&amp;nbsp;mf&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MyForm&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.Run(mf);&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.ReadLine();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
} &lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;p&gt;&lt;font size="2"&gt;Pada code diatas akan menyebabkan error karena &lt;/font&gt;&lt;font size="2"&gt;&lt;b&gt;thread pool thread&lt;/b&gt; tidak di izinkan merubah Text dari form.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/New%20Picture.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="2"&gt;So, untuk meng-update Text dari MyForm maka kita harus menggunakan &lt;b&gt;MainThread. &lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;Karena &lt;b&gt;MainThread&lt;/b&gt; yang menginisialisasi MyForm dan &lt;b&gt;hanya&lt;/b&gt; &lt;b&gt;MainThread&lt;/b&gt; &lt;b&gt;yang bisa meng-update state dari MyForm&lt;/b&gt;. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Yang menjadi pertanyaan adalah &amp;quot;bagaimana kita bisa menggunakan &lt;b&gt;MainThread&lt;/b&gt; dari dalam method(&lt;font&gt;&lt;font size="2"&gt;method ResponseToFunc&lt;/font&gt;&lt;/font&gt;) yang di eksekusi&lt;/p&gt;&lt;p&gt;oleh &lt;b&gt;Thread Pool Thread&lt;/b&gt;&lt;b&gt; ?&amp;quot;&lt;/b&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;Kita bisa menggunakan&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt; &lt;font color="#000000"&gt;object&lt;/font&gt; &lt;b&gt;&lt;font color="#000000"&gt;SynchronizationContext &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;untuk melaksanakan ini.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Kita mereferensi object dari &lt;span&gt;&lt;b&gt;&lt;font color="#000000"&gt;SynchronizationContext&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt; dengan cara memanggil static property&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#000000"&gt; &lt;b&gt;SynchronizationContext&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;b&gt;&lt;font color="#000000"&gt;.Current&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;dari dalam method yang diakses oleh &lt;b&gt;MainThread&lt;/b&gt; (dalam kasus ini method&lt;/font&gt;&lt;font size="2"&gt; OnMouseClick).&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#000000"&gt;Lalu kita panggil method Post &lt;/font&gt;&lt;/span&gt;dari object &lt;span&gt;&lt;b&gt;&lt;font color="#000000"&gt;SynchronizationContext,&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#000000"&gt; dan kita isi parameternya dengan delegate yang method targetnya&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font color="#000000"&gt;berisi kode untuk&lt;/font&gt;&lt;/span&gt; meng-update Text dari MyForm. Untuk lebih jelasnya seperti dalam kode berikut :&lt;/font&gt;&lt;/p&gt;&lt;pre style="font-family:Courier New;font-size:13;color:black;background:white;"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;sealed&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MyForm&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Form&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//field&amp;nbsp;untuk&amp;nbsp;menyimpan&amp;nbsp;referensi&amp;nbsp;dari&amp;nbsp;object&amp;nbsp;SynchronizationContext&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;SynchronizationContext&lt;/span&gt;&amp;nbsp;syncContext;&lt;/b&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;gt;&amp;nbsp;func&amp;nbsp;=&amp;nbsp;arg&amp;nbsp;=&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;arg;&amp;nbsp;i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.Sleep(300);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Result&amp;nbsp;:&amp;nbsp;&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;(result&amp;nbsp;=&amp;nbsp;i));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;MyForm()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Main&amp;nbsp;Thread&amp;nbsp;men-set&amp;nbsp;state&amp;nbsp;dari&amp;nbsp;MyForm&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Thread&amp;nbsp;Name&amp;nbsp;:&amp;nbsp;{0},&amp;nbsp;IsThreadPoolThread&amp;nbsp;:&amp;nbsp;{1}&amp;quot;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.Name,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.IsThreadPoolThread);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Width&amp;nbsp;=&amp;nbsp;Height&amp;nbsp;=&amp;nbsp;400;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//ResponseToFunc&amp;nbsp;akan&amp;nbsp;akan&amp;nbsp;diinvoke&amp;nbsp;setelah&amp;nbsp;method&amp;nbsp;target&amp;nbsp;si&amp;nbsp;delegate&amp;nbsp;Func&amp;lt;Int32,&amp;nbsp;Int32&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//selesai&amp;nbsp;di&amp;nbsp;eksekusi&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;ResponseToFunc(&lt;span style="color:#2b91af;"&gt;IAsyncResult&lt;/span&gt; arg)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//ThreadPoolThread&amp;nbsp;mengeksekusi&amp;nbsp;method&amp;nbsp;ini&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;IsThreadPoolThread&amp;nbsp;:&amp;nbsp;&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.IsThreadPoolThread);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;try&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;func.EndInvoke(arg);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;action&amp;nbsp;complete,&amp;nbsp;result&amp;nbsp;=&amp;nbsp;{0}&amp;quot;&lt;/span&gt;,&amp;nbsp;result);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//syncContext.Post&amp;nbsp;akan&amp;nbsp;menginvoke&amp;nbsp;sebuah&amp;nbsp;method&amp;nbsp;yang&amp;nbsp;meng-update&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//state&amp;nbsp;dari&amp;nbsp;MyForm&amp;nbsp;dengan&amp;nbsp;menggunakan&amp;nbsp;MainThread.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;syncContext.Post(arg&amp;nbsp;=&amp;gt;&amp;nbsp;{
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Update&amp;nbsp;text&amp;nbsp;dilakukan&amp;nbsp;oleh&amp;nbsp;MainThread&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Text&amp;nbsp;=&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;func&amp;nbsp;complete&amp;quot;&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;);&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;catch&lt;/span&gt;&amp;nbsp;(&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt;&amp;nbsp;ex)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(ex.Message);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;OnMouseClick(&lt;span style="color:#2b91af;"&gt;MouseEventArgs&lt;/span&gt;&amp;nbsp;e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Mendapatkan&amp;nbsp;referensi&amp;nbsp;ke&amp;nbsp;object&amp;nbsp;SynchronizationContext&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;syncContext&amp;nbsp;=&amp;nbsp;&lt;span style="color:#2b91af;"&gt;SynchronizationContext&lt;/span&gt;.Current;&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Text&amp;nbsp;=&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;Initial&amp;nbsp;Text&amp;quot;&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;func.BeginInvoke(5,&amp;nbsp;ResponseToFunc,&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnMouseClick(e);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;br /&gt;&lt;br /&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/Untitled-1.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="2"&gt;Gambar diatas menunjukkan &lt;b&gt;MainThread&lt;/b&gt; berhasil mengupdate Text dari MainForm via &lt;/font&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;font size="2"&gt;&lt;b&gt;SynchronizationContext&lt;/b&gt;&lt;/font&gt; &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/12/synchronization-context.aspx&amp;amp;subject=Threading Model dan Synchronization Context" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/12/synchronization-context.aspx&amp;amp;t=Threading+Model+dan+Synchronization+Context" target="_blank" title="Submit Threading Model dan Synchronization Context to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/12/synchronization-context.aspx&amp;amp;title=Threading+Model+dan+Synchronization+Context" target="_blank" title="Submit Threading Model dan Synchronization Context to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/12/synchronization-context.aspx&amp;amp;phase=2" target="_blank" title="Submit Threading Model dan Synchronization Context to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/12/synchronization-context.aspx&amp;amp;title=Threading+Model+dan+Synchronization+Context" target="_blank" title="Add Threading Model dan Synchronization Context to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192413" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/Synchronization+Context/default.aspx">Synchronization Context</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/Threading/default.aspx">Threading</category></item><item><title>Serialisasi pada object yang tidak serializable</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/serialisasi-pada-object-yang-tidak-serializable.aspx</link><pubDate>Sun, 03 Apr 2011 08:47:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192358</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192358</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192358</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/serialisasi-pada-object-yang-tidak-serializable.aspx#comments</comments><description>&lt;p&gt;&lt;font size="2"&gt;Ini adalah kode yang menjelaskan bagaimana kita melakukan &lt;b&gt;serialisasi pada object yang&lt;/b&gt; &lt;b&gt;tidak serializable&lt;/b&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Disini kita menggunakan surrogate untuk melakukan serialization.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Dan apabila object yang akan kita serialkan tersebut ternyata type dari value-nya si field tidak serializable&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;maka field tersebut tetap kita serialkan tetapi valuenya kita set menjadi null.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;&lt;span style="color:green;"&gt;//class&amp;nbsp;SurrogateType&amp;nbsp;yang&amp;nbsp;meng-implementasi&amp;nbsp;ISerializationSurrogate&lt;/span&gt;
&lt;span style="color:green;"&gt;//sebagai&amp;nbsp;surrogate&amp;nbsp;yang&amp;nbsp;akan&amp;nbsp;melaksanakan&amp;nbsp;serialization&amp;nbsp;&lt;/span&gt;
&lt;span style="color:green;"&gt;//untuk&amp;nbsp;type&amp;nbsp;yang&amp;nbsp;tidak&amp;nbsp;serializable&lt;/span&gt;
&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;sealed&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;SurrogateType&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span&gt;ISerializationSurrogate&lt;/span&gt;&amp;nbsp;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//bindingflags&amp;nbsp;sebagai&amp;nbsp;flag&amp;nbsp;yang&amp;nbsp;menentukan&amp;nbsp;karakterisitik&amp;nbsp;field&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//yang&amp;nbsp;akan&amp;nbsp;diserialkan&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span&gt;BindingFlags&lt;/span&gt;&amp;nbsp;bf&amp;nbsp;=&amp;nbsp;&lt;span&gt;BindingFlags&lt;/span&gt;.Public&amp;nbsp;|&amp;nbsp;&lt;span&gt;BindingFlags&lt;/span&gt;.Instance&amp;nbsp;|
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;BindingFlags&lt;/span&gt;.NonPublic&amp;nbsp;|&amp;nbsp;&lt;span&gt;BindingFlags&lt;/span&gt;.Static;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//obj(parameter&amp;nbsp;pertama)&amp;nbsp;adalah&amp;nbsp;referensi&amp;nbsp;ke&amp;nbsp;object&amp;nbsp;yang&amp;nbsp;sesungguhnya(dalam&amp;nbsp;hal&amp;nbsp;ini&amp;nbsp;object&amp;nbsp;yang&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//tipenya&amp;nbsp;tidak&amp;nbsp;serializable)&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;GetObjectData(&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;obj,&amp;nbsp;&lt;span&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;semua&amp;nbsp;fields&amp;nbsp;pada&amp;nbsp;object&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;FieldInfo&lt;/span&gt;[]&amp;nbsp;arr_fi&amp;nbsp;=&amp;nbsp;obj.GetType().GetFields(bf);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;semua&amp;nbsp;fields&amp;nbsp;value&amp;nbsp;pada&amp;nbsp;object&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;[]&amp;nbsp;values&amp;nbsp;=&amp;nbsp;&lt;span&gt;FormatterServices&lt;/span&gt;.GetObjectData(obj,&amp;nbsp;arr_fi);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;counter=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;v&amp;nbsp;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&amp;nbsp;arr_fi)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//cek&amp;nbsp;apakah&amp;nbsp;field&amp;nbsp;tidak&amp;nbsp;sama&amp;nbsp;dengan&amp;nbsp;null&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&amp;nbsp;(v.GetValue(obj)&amp;nbsp;!=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//jika&amp;nbsp;value-nya&amp;nbsp;si&amp;nbsp;field&amp;nbsp;tidak&amp;nbsp;sama&amp;nbsp;dengan&amp;nbsp;null,&amp;nbsp;periksa&amp;nbsp;apakah&amp;nbsp;type&amp;nbsp;value&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dari&amp;nbsp;si&amp;nbsp;field&amp;nbsp;menggunakan&amp;nbsp;attribute&amp;nbsp;serializable&amp;nbsp;(jadi&amp;nbsp;yang&amp;nbsp;diperiksa&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//bukan&amp;nbsp;type&amp;nbsp;dari&amp;nbsp;si&amp;nbsp;field,&amp;nbsp;melainkan&amp;nbsp;type&amp;nbsp;valuenya).&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Jika&amp;nbsp;hasilnya&amp;nbsp;betul&amp;nbsp;maka&amp;nbsp;set&amp;nbsp;SerializationInfo&amp;nbsp;dengan&amp;nbsp;nama&amp;nbsp;si&amp;nbsp;field,&amp;nbsp;dan&amp;nbsp;value&amp;nbsp;si&amp;nbsp;field.&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Jika&amp;nbsp;tidak,&amp;nbsp;maka&amp;nbsp;type&amp;nbsp;value&amp;nbsp;dari&amp;nbsp;si&amp;nbsp;field&amp;nbsp;tidak&amp;nbsp;serializable&amp;nbsp;dan&amp;nbsp;kita&amp;nbsp;set&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//SerializationInfo&amp;nbsp;dengan&amp;nbsp;nama&amp;nbsp;si&amp;nbsp;field&amp;nbsp;tapi&amp;nbsp;dengan&amp;nbsp;value&amp;nbsp;null.&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&amp;nbsp;(v.GetValue(obj).GetType().IsDefined(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span&gt;SerializableAttribute&lt;/span&gt;),&amp;nbsp;&lt;span style="color:blue;"&gt;false&lt;/span&gt;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(v.Name,&amp;nbsp;values[counter]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;else&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(v.Name,&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//jika&amp;nbsp;field&amp;nbsp;sama&amp;nbsp;dengan&amp;nbsp;null&amp;nbsp;maka&amp;nbsp;set&amp;nbsp;SerializationInfo&amp;nbsp;dengan&amp;nbsp;nama&amp;nbsp;si&amp;nbsp;field&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dan&amp;nbsp;valuenya&amp;nbsp;kita&amp;nbsp;isi&amp;nbsp;dengan&amp;nbsp;null&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;else&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(v.Name,&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//obj(parameter&amp;nbsp;pertama)&amp;nbsp;adalah&amp;nbsp;referensi&amp;nbsp;ke&amp;nbsp;object&amp;nbsp;yang&amp;nbsp;sesungguhnya(dalam&amp;nbsp;hal&amp;nbsp;ini&amp;nbsp;object&amp;nbsp;yang&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//tipenya&amp;nbsp;tidak&amp;nbsp;serializable)&amp;nbsp;yang&amp;nbsp;telah&amp;nbsp;di&amp;nbsp;serialkan&amp;nbsp;dan&amp;nbsp;sedang&amp;nbsp;di&amp;nbsp;deserialkan.&amp;nbsp;Objectnya&amp;nbsp;sendiri&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//sudah&amp;nbsp;ada&amp;nbsp;didalam&amp;nbsp;memory&amp;nbsp;karena&amp;nbsp;sudah&amp;nbsp;diinstan-kan&amp;nbsp;oleh&amp;nbsp;formatter&amp;nbsp;tetapi&amp;nbsp;fields-nya&amp;nbsp;masih&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//kosong&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;SetObjectData(&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;obj,&amp;nbsp;&lt;span&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context,&amp;nbsp;&lt;span&gt;ISurrogateSelector&lt;/span&gt;&amp;nbsp;selector)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;semua&amp;nbsp;fields&amp;nbsp;dari&amp;nbsp;object&amp;nbsp;yang&amp;nbsp;telah&amp;nbsp;dibuat&amp;nbsp;instan-nya&amp;nbsp;oleh&amp;nbsp;formatter&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//setelah&amp;nbsp;serialization(dalam&amp;nbsp;hal&amp;nbsp;ini&amp;nbsp;object&amp;nbsp;masing&amp;nbsp;kosong,&amp;nbsp;fieldnya&amp;nbsp;belum&amp;nbsp;diisi&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//karena&amp;nbsp;constructor&amp;nbsp;tidak&amp;nbsp;dipanggil&amp;nbsp;dan&amp;nbsp;method&amp;nbsp;inilah&amp;nbsp;yang&amp;nbsp;akan&amp;nbsp;meng-set&amp;nbsp;fields&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dari&amp;nbsp;object&amp;nbsp;tersebut)&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dan&amp;nbsp;kita&amp;nbsp;akan&amp;nbsp;mengisi&amp;nbsp;value&amp;nbsp;dari&amp;nbsp;fields&amp;nbsp;tersebut&amp;nbsp;dengan&amp;nbsp;value&amp;nbsp;yang&amp;nbsp;terdapat&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dalam&amp;nbsp;object&amp;nbsp;SerializationInfo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;FieldInfo&lt;/span&gt;[]&amp;nbsp;arr_fi&amp;nbsp;=&amp;nbsp;obj.GetType().GetFields(bf);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;[]&amp;nbsp;values&amp;nbsp;=&amp;nbsp;&lt;span&gt;FormatterServices&lt;/span&gt;.GetObjectData(obj,&amp;nbsp;arr_fi);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;v&amp;nbsp;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&amp;nbsp;arr_fi)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v.SetValue(obj,&amp;nbsp;info.GetValue(v.Name,&amp;nbsp;v.FieldType));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;obj;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
 
&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;Program&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span&gt;Stream&lt;/span&gt;&amp;nbsp;StreamMedium=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;FileStream&lt;/span&gt;(&lt;span&gt;&amp;quot;file.txt&amp;quot;&lt;/span&gt;,&amp;nbsp;&lt;span&gt;FileMode&lt;/span&gt;.Create);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span&gt;IFormatter&lt;/span&gt;&amp;nbsp;formatter&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;SoapFormatter&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span&gt;SurrogateSelector&lt;/span&gt;&amp;nbsp;surrogate&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;SurrogateSelector&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;Int32IsSerializable&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;SurrogateDemo(&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;graph)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//print&amp;nbsp;object&amp;nbsp;sebelum&amp;nbsp;serialisasi&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(graph);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//assign&amp;nbsp;tipe&amp;nbsp;yang&amp;nbsp;akan&amp;nbsp;di-surrogate-kan&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;surrogate.AddSurrogate(graph.GetType(),&amp;nbsp;formatter.Context,&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;SurrogateType&lt;/span&gt;());
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//assign&amp;nbsp;SurrogateSelector&amp;nbsp;ke&amp;nbsp;formatter&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter.SurrogateSelector&amp;nbsp;=&amp;nbsp;surrogate;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//formatter&amp;nbsp;akan&amp;nbsp;menggunakan&amp;nbsp;surrogate&amp;nbsp;untuk&amp;nbsp;melakukan&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//serialization&amp;nbsp;pada&amp;nbsp;object&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter.Serialize(StreamMedium,&amp;nbsp;graph);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//nulling&amp;nbsp;variabel&amp;nbsp;graph&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;graph&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StreamMedium.Position&amp;nbsp;=&amp;nbsp;0;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//print&amp;nbsp;state&amp;nbsp;dari&amp;nbsp;object&amp;nbsp;yang&amp;nbsp;telah&amp;nbsp;diserialkan&amp;nbsp;sebagai&amp;nbsp;bukti&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//kalau&amp;nbsp;serialization&amp;nbsp;berhasil&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;StreamReader&lt;/span&gt;(StreamMedium).ReadToEnd());
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;////formatter&amp;nbsp;akan&amp;nbsp;menggunakan&amp;nbsp;surrogate&amp;nbsp;untuk&amp;nbsp;melakukan&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//deserialization&amp;nbsp;pada&amp;nbsp;object&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;graph&amp;nbsp;=&amp;nbsp;Deserializer(StreamMedium);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//print&amp;nbsp;object&amp;nbsp;sebagai&amp;nbsp;bukti&amp;nbsp;kalau&amp;nbsp;deserialisasi&amp;nbsp;berhasil&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(graph);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;Program&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SurrogateDemo(obj);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;nbsp;ToString()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span&gt;String&lt;/span&gt;.Format(&lt;span&gt;&amp;quot;Program.StreamMedium&amp;nbsp;=&amp;nbsp;{0}\n&amp;quot;&lt;/span&gt;&amp;nbsp;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;quot;Program.formatter&amp;nbsp;=&amp;nbsp;{1}\n&amp;quot;&lt;/span&gt;&amp;nbsp;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;quot;Program.surrogate&amp;nbsp;=&amp;nbsp;{2}\n&amp;quot;&lt;/span&gt;&amp;nbsp;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;quot;Program.Int32IsSerializable&amp;nbsp;=&amp;nbsp;{3}\n&amp;quot;&lt;/span&gt;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StreamMedium,&amp;nbsp;formatter,&amp;nbsp;surrogate,&amp;nbsp;Int32IsSerializable);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;Output Program :&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;a href="http://geeks.netindonesia.net/blogs/adaapanya/New%20Picture.png"&gt;&lt;img src="http://geeks.netindonesia.net/blogs/adaapanya/New%20Picture.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/serialisasi-pada-object-yang-tidak-serializable.aspx&amp;amp;subject=Serialisasi pada object yang tidak serializable" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/serialisasi-pada-object-yang-tidak-serializable.aspx&amp;amp;t=Serialisasi+pada+object+yang+tidak+serializable" target="_blank" title="Submit Serialisasi pada object yang tidak serializable to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/serialisasi-pada-object-yang-tidak-serializable.aspx&amp;amp;title=Serialisasi+pada+object+yang+tidak+serializable" target="_blank" title="Submit Serialisasi pada object yang tidak serializable to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/serialisasi-pada-object-yang-tidak-serializable.aspx&amp;amp;phase=2" target="_blank" title="Submit Serialisasi pada object yang tidak serializable to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/serialisasi-pada-object-yang-tidak-serializable.aspx&amp;amp;title=Serialisasi+pada+object+yang+tidak+serializable" target="_blank" title="Add Serialisasi pada object yang tidak serializable to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192358" width="1" height="1"&gt;</description></item><item><title>Munggunakan surrogate untuk melakukan serialisasi</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/munggunakan-surrogate-untuk-melakukan-serialisasi.aspx</link><pubDate>Sat, 02 Apr 2011 17:15:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192356</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192356</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192356</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/munggunakan-surrogate-untuk-melakukan-serialisasi.aspx#comments</comments><description>&lt;p&gt;&lt;font size="2"&gt;Ini adalah sample kode yang menjelaskan bagaimana menggunakan surrogate untuk melakukan serialisasi. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;Sehingga kita bisa take control pada class yang tidak melaksanakan ISerializable.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;&lt;span style="color:green;"&gt;//class&amp;nbsp;WillBeSurrogated&amp;nbsp;yang&amp;nbsp;tidak&amp;nbsp;meng-implement&amp;nbsp;ISerializable&lt;/span&gt;
[&lt;span&gt;Serializable&lt;/span&gt;]
&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;sealed&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;WillBeSurrogated&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;SerializedNumber;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//field&amp;nbsp;yang&amp;nbsp;tidak&amp;nbsp;diserialkan&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span&gt;NonSerialized&lt;/span&gt;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;UnserializedNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;WillBeSurrogated(&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;SerializedNumber,&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;UnserializedNumber)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.SerializedNumber&amp;nbsp;=&amp;nbsp;SerializedNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.UnserializedNumber&amp;nbsp;=&amp;nbsp;UnserializedNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;nbsp;ToString()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span&gt;String&lt;/span&gt;.Format(&lt;span&gt;&amp;quot;WillBeSurrogated.SerializedNumber&amp;nbsp;=&amp;nbsp;{0}\n&amp;quot;&lt;/span&gt;&amp;nbsp;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;quot;WillBeSurrogated.UnserializedNumber&amp;nbsp;=&amp;nbsp;{1}\n&amp;quot;&lt;/span&gt;,&amp;nbsp;SerializedNumber,&amp;nbsp;UnserializedNumber);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;br /&gt;
&lt;span style="color:green;"&gt;//class&amp;nbsp;SurrogateType&amp;nbsp;yang&amp;nbsp;meng-implementasi&amp;nbsp;ISerializationSurrogate&lt;/span&gt;
&lt;span style="color:green;"&gt;//sebagai&amp;nbsp;surrogate&amp;nbsp;yang&amp;nbsp;akan&amp;nbsp;melaksanakan&amp;nbsp;serialization&amp;nbsp;&lt;/span&gt;
&lt;span style="color:green;"&gt;//untuk&amp;nbsp;class&amp;nbsp;WillBeSurrogated&lt;/span&gt;
&lt;span style="color:blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;sealed&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;SurrogateType&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span&gt;ISerializationSurrogate&lt;/span&gt;&amp;nbsp;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;GetObjectData(&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;obj,&amp;nbsp;&lt;span&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;fields&amp;nbsp;dari&amp;nbsp;obj&amp;nbsp;WillBeSurrogated&amp;nbsp;yang&amp;nbsp;bisa&amp;nbsp;diserialkan&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;MemberInfo&lt;/span&gt;[]&amp;nbsp;arr_mi&amp;nbsp;=&amp;nbsp;&lt;span&gt;FormatterServices&lt;/span&gt;.GetSerializableMembers(obj.GetType());
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;value&amp;nbsp;dari&amp;nbsp;masing-masing&amp;nbsp;fields&amp;nbsp;di&amp;nbsp;obj&amp;nbsp;WillBeSurrogated&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;[]&amp;nbsp;values&amp;nbsp;=&amp;nbsp;&lt;span&gt;FormatterServices&lt;/span&gt;.GetObjectData(obj,&amp;nbsp;arr_mi);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;counter=0;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//menambahkan&amp;nbsp;value&amp;nbsp;dari&amp;nbsp;obj&amp;nbsp;WillBeSurrogated&amp;nbsp;ke&amp;nbsp;object&amp;nbsp;SerializationInfo&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;v&amp;nbsp;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&amp;nbsp;arr_mi)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(v.Name,&amp;nbsp;values[counter]);&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;counter++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//obj&amp;nbsp;pada&amp;nbsp;parameter&amp;nbsp;pertama&amp;nbsp;adalah&amp;nbsp;instant&amp;nbsp;dari&amp;nbsp;class&amp;nbsp;WillBeSurrogated&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//yang&amp;nbsp;telah&amp;nbsp;di-instantiate&amp;nbsp;oleh&amp;nbsp;formatter&amp;nbsp;tapi&amp;nbsp;belum&amp;nbsp;diisi&amp;nbsp;fields&amp;nbsp;nya&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;SetObjectData(&lt;span&gt;Object&lt;/span&gt;&amp;nbsp;obj,&amp;nbsp;&lt;span&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context,&amp;nbsp;&lt;span&gt;ISurrogateSelector&lt;/span&gt;&amp;nbsp;selector)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;fields&amp;nbsp;dari&amp;nbsp;obj&amp;nbsp;WillBeSurrogated&amp;nbsp;yang&amp;nbsp;bisa&amp;nbsp;di&amp;nbsp;serialkan&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;MemberInfo&lt;/span&gt;[]&amp;nbsp;arr_mi&amp;nbsp;=&amp;nbsp;&lt;span&gt;FormatterServices&lt;/span&gt;.GetSerializableMembers(obj.GetType());
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;value&amp;nbsp;dari&amp;nbsp;masing-masing&amp;nbsp;fields&amp;nbsp;di&amp;nbsp;obj&amp;nbsp;WillBeSurrogated&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Object&lt;/span&gt;[]&amp;nbsp;values&amp;nbsp;=&amp;nbsp;&lt;span&gt;FormatterServices&lt;/span&gt;.GetObjectData(obj,&amp;nbsp;arr_mi);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;FieldInfo&lt;/span&gt;&amp;nbsp;fi;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//menambahkan&amp;nbsp;value&amp;nbsp;dari&amp;nbsp;obj&amp;nbsp;SerializationInfo&amp;nbsp;ke&amp;nbsp;object&amp;nbsp;WillBeSurrogated&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;v&amp;nbsp;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&amp;nbsp;arr_mi)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fi&amp;nbsp;=&amp;nbsp;(&lt;span&gt;FieldInfo&lt;/span&gt;)v;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fi.SetValue(obj,&amp;nbsp;info.GetValue(fi.Name,&amp;nbsp;fi.FieldType));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;obj;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;span style="color:blue;"&gt;&lt;br /&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Program&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Stream&lt;/span&gt;&amp;nbsp;CacheStream&lt;span style="color:blue;"&gt;&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;private &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;IFormatter&lt;/span&gt;&amp;nbsp;formatter&lt;span style="color:blue;"&gt;&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;SurrogateDemo()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt;&amp;nbsp;wbs&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;WillBeSurrogated&lt;/span&gt;(10,&amp;nbsp;20);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(wbs);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheStream&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;BinaryFormatter&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;SurrogateSelector&lt;/span&gt;&amp;nbsp;ss&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;SurrogateSelector&lt;/span&gt;();
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//assign&amp;nbsp;tipe&amp;nbsp;yang&amp;nbsp;akan&amp;nbsp;di-surrogate-kan&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ss.AddSurrogate(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;WillBeSurrogated&lt;/span&gt;),&amp;nbsp;formatter.Context,&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;SurrogateType&lt;/span&gt;());
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//assign&amp;nbsp;SurrogateSelector&amp;nbsp;ke&amp;nbsp;formatter&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter.SurrogateSelector&amp;nbsp;=&amp;nbsp;ss;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//formatter&amp;nbsp;akan&amp;nbsp;menggunakan&amp;nbsp;surrogate&amp;nbsp;untuk&amp;nbsp;melakukan&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//serialization&amp;nbsp;pada&amp;nbsp;obj&amp;nbsp;wbs&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatter.Serialize(CacheStream,&amp;nbsp;wbs);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//nulling&amp;nbsp;variabel&amp;nbsp;wbs&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wbs&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheStream.Position&amp;nbsp;=&amp;nbsp;0;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//formatter&amp;nbsp;akan&amp;nbsp;menggunakan&amp;nbsp;surrogate&amp;nbsp;untuk&amp;nbsp;melakukan&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//deserialization&amp;nbsp;pada&amp;nbsp;obj&amp;nbsp;wbs&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wbs&amp;nbsp;=&amp;nbsp;formatter.Deserialize(CacheStream);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(wbs);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SurrogateDemo();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/font&gt;&lt;/pre&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/munggunakan-surrogate-untuk-melakukan-serialisasi.aspx&amp;amp;subject=Munggunakan surrogate untuk melakukan serialisasi" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/munggunakan-surrogate-untuk-melakukan-serialisasi.aspx&amp;amp;t=Munggunakan+surrogate+untuk+melakukan+serialisasi" target="_blank" title="Submit Munggunakan surrogate untuk melakukan serialisasi to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/munggunakan-surrogate-untuk-melakukan-serialisasi.aspx&amp;amp;title=Munggunakan+surrogate+untuk+melakukan+serialisasi" target="_blank" title="Submit Munggunakan surrogate untuk melakukan serialisasi to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/munggunakan-surrogate-untuk-melakukan-serialisasi.aspx&amp;amp;phase=2" target="_blank" title="Submit Munggunakan surrogate untuk melakukan serialisasi to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/03/munggunakan-surrogate-untuk-melakukan-serialisasi.aspx&amp;amp;title=Munggunakan+surrogate+untuk+melakukan+serialisasi" target="_blank" title="Add Munggunakan surrogate untuk melakukan serialisasi to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192356" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/Serialization/default.aspx">Serialization</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/surrogate/default.aspx">surrogate</category></item><item><title>Implementasi ISerializable pada Derived Type yang Inherited dari Base Type Non ISerializable</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/01/implementasi-iserializable-pada-derived-type-yang-inherited-dari-base-type-non-iserializable.aspx</link><pubDate>Fri, 01 Apr 2011 10:27:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192352</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192352</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192352</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/01/implementasi-iserializable-pada-derived-type-yang-inherited-dari-base-type-non-iserializable.aspx#comments</comments><description>&lt;p&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;Ketika kita mau meng-implement &lt;b&gt;ISerializable&lt;/b&gt; pada Derived type yang inherited dari Base type &lt;b&gt;yang telah meng-implement ISerializable&lt;/b&gt;,&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;biasanya kita memanggil &lt;b&gt;base.GetObjectData&lt;/b&gt;. Seperti yang ditunjukkan pada kode berikut :&lt;/font&gt;&lt;/p&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;[&lt;span style="color:#2b91af;"&gt;Serializable&lt;/span&gt;]
&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Base&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color:#2b91af;"&gt;ISerializable&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;FirstNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;UnserializedNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;Base(&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;FirstNumber)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.FirstNumber&amp;nbsp;=&amp;nbsp;FirstNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnserializedNumber&amp;nbsp;=&amp;nbsp;FirstNumber&amp;nbsp;*&amp;nbsp;10;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&amp;nbsp;Base(&lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FirstNumber&amp;nbsp;=&amp;nbsp;info.GetInt32(&lt;span style="color:#a31515;"&gt;&amp;quot;FirstNumber&amp;quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;GetObjectData(&lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(&lt;span style="color:#a31515;"&gt;&amp;quot;FirstNumber&amp;quot;&lt;/span&gt;,&amp;nbsp;FirstNumber);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;&amp;nbsp;ToString()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;FirstNumber&amp;nbsp;=&amp;nbsp;{0}\n&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;UnserializedNumber&amp;nbsp;=&amp;nbsp;{1}&amp;quot;&lt;/span&gt;,&amp;nbsp;FirstNumber,&amp;nbsp;UnserializedNumber);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}
[&lt;span style="color:#2b91af;"&gt;Serializable&lt;/span&gt;]
&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Base&lt;/span&gt;,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;ISerializable&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;SecondNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;Derived(&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;SecondNumber):&amp;nbsp;&lt;span style="color:blue;"&gt;base&lt;/span&gt;(SecondNumber)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.SecondNumber&amp;nbsp;=&amp;nbsp;SecondNumber&amp;nbsp;*&amp;nbsp;2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Derived(&lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context)&amp;nbsp;:&amp;nbsp;&lt;span style="color:blue;"&gt;base&lt;/span&gt;(info,&amp;nbsp;context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SecondNumber&amp;nbsp;=&amp;nbsp;info.GetInt32(&lt;span style="color:#a31515;"&gt;&amp;quot;SecondNumber&amp;quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;GetObjectData(&lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(&lt;span style="color:#a31515;"&gt;&amp;quot;SecondNumber&amp;quot;&lt;/span&gt;,&amp;nbsp;SecondNumber);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:green;"&gt;//memanggil&amp;nbsp;base.GetObjectData()&amp;nbsp;agar&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//Serialization&amp;nbsp;bisa&amp;nbsp;berjalan&amp;nbsp;dengan&amp;nbsp;baik&lt;/span&gt;&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;base&lt;/span&gt;.GetObjectData(info,&amp;nbsp;context);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;nbsp;ToString()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:blue;"&gt;base&lt;/span&gt;.ToString()&amp;nbsp;+&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&amp;nbsp;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;SecondNumber&amp;nbsp;=&amp;nbsp;&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;SecondNumber);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Program&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;&amp;nbsp;CacheStream&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;BinaryFormatter&lt;/span&gt;&amp;nbsp;formater&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;Serializer(&lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt;&amp;nbsp;graph)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheStream&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formater&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;BinaryFormatter&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formater.Serialize(CacheStream,&amp;nbsp;graph);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Serialization&amp;nbsp;complete&amp;quot;&lt;/span&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt;&amp;nbsp;Deserializer(&lt;span style="color:#2b91af;"&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;&amp;nbsp;stream)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formater&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;BinaryFormatter&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;FormatterConverter&lt;/span&gt;&amp;nbsp;converter&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;FormatterConverter&lt;/span&gt;();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stream.Position&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;        &lt;/font&gt;&lt;font&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;formater.Deserialize(stream);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;Object&lt;/span&gt; d&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Derived&lt;/span&gt;(10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Serializer(d);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;        &lt;b&gt;&lt;span style="color:green;"&gt;//nulling variable d&lt;/span&gt;&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d&amp;nbsp;= &lt;span style="color:#2b91af;"&gt;&lt;/span&gt;Deserializer(&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;&lt;/span&gt;CacheStream);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(d);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;Tapi bagaimana apabila kita hendak meng-implement &lt;b&gt;ISerializable&lt;/b&gt; pada Derived type&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;yang inherited dari Base type &lt;b&gt;yang tidak meng-implement ISerializable ?&lt;/b&gt;&lt;/font&gt;&lt;font face="arial,helvetica,sans-serif"&gt;  &lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;Untuk melakukannya maka kita bisa mengenumerasi semua field dari object Derived dan menyimpannya kedalam object &lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;&lt;b&gt;SerializationInfo&lt;/b&gt;, seperti yang ditunjukkan pada kode berikut sehingga object Derived bisa diserialkan.&lt;/font&gt;&lt;/pre&gt;&lt;pre style="font-family:Courier New;color:black;background:none repeat scroll 0% 0% white;"&gt;&lt;font size="2"&gt;[&lt;span&gt;Serializable&lt;/span&gt;]
&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;BaseNotISerializable&lt;/span&gt;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;FirstNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;UnserializedNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;BaseNotISerializable(&lt;span&gt;Int32&lt;/span&gt;&amp;nbsp;FirstNumber)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.FirstNumber&amp;nbsp;=&amp;nbsp;FirstNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UnserializedNumber&amp;nbsp;=&amp;nbsp;FirstNumber&amp;nbsp;*&amp;nbsp;10;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span&gt;String&lt;/span&gt;&amp;nbsp;ToString()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span&gt;String&lt;/span&gt;.Format(&lt;span&gt;&amp;quot;FirstNumber&amp;nbsp;=&amp;nbsp;{0}\n&amp;quot;&lt;/span&gt;&amp;nbsp;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;quot;UnserializedNumber&amp;nbsp;=&amp;nbsp;{1}&amp;quot;&lt;/span&gt;,&amp;nbsp;FirstNumber,&amp;nbsp;UnserializedNumber);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/font&gt;&lt;font size="2"&gt;&lt;br /&gt;[&lt;span style="color:#2b91af;"&gt;Serializable&lt;/span&gt;]&amp;nbsp;
&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;DerivedISerializable&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color:#2b91af;"&gt;BaseNotISerializable&lt;/span&gt;,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;ISerializable&lt;/span&gt;&amp;nbsp;
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;SecondNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;DerivedISerializable(&lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;&amp;nbsp;SecondNumber)&amp;nbsp;:&amp;nbsp;&lt;span style="color:blue;"&gt;base&lt;/span&gt;(SecondNumber)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.SecondNumber&amp;nbsp;=&amp;nbsp;SecondNumber&amp;nbsp;*&amp;nbsp;2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DerivedISerializable(&lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context)&amp;nbsp;:&amp;nbsp;&lt;span style="color:blue;"&gt;base&lt;/span&gt;(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;semua&amp;nbsp;field&amp;nbsp;dari&amp;nbsp;Derived&amp;nbsp;yang&amp;nbsp;bisa&amp;nbsp;diserialkan&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dengan&amp;nbsp;memanggil&amp;nbsp;FormatterServices.GetSerializableMembers&lt;/span&gt;&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MemberInfo&lt;/span&gt;[]&amp;nbsp;arr_mi&amp;nbsp;=&amp;nbsp;&lt;span style="color:#2b91af;"&gt;FormatterServices&lt;/span&gt;.GetSerializableMembers(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.GetType());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;FieldInfo&lt;/span&gt;&amp;nbsp;fi;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:green;"&gt;//isi&amp;nbsp;nilai&amp;nbsp;semua&amp;nbsp;field&amp;nbsp;dengan&amp;nbsp;value&amp;nbsp;yang&amp;nbsp;disimpan&amp;nbsp;pada&amp;nbsp;object&amp;nbsp;SerializationInfo&lt;/span&gt;&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;v&amp;nbsp;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&amp;nbsp;arr_mi)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fi=(&lt;span style="color:#2b91af;"&gt;FieldInfo&lt;/span&gt;)v;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fi.SetValue(&lt;span style="color:blue;"&gt;this&lt;/span&gt;,&amp;nbsp;info.GetValue(fi.Name,&amp;nbsp;fi.FieldType));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;GetObjectData(&lt;span style="color:#2b91af;"&gt;SerializationInfo&lt;/span&gt;&amp;nbsp;info,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;StreamingContext&lt;/span&gt;&amp;nbsp;context)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:green;"&gt;//mendapatkan&amp;nbsp;semua&amp;nbsp;field&amp;nbsp;dari&amp;nbsp;Derived&amp;nbsp;yang&amp;nbsp;bisa&amp;nbsp;diserialkan&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//dengan&amp;nbsp;memanggil&amp;nbsp;FormatterServices.GetSerializableMembers&lt;/span&gt;&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;MemberInfo&lt;/span&gt;[]&amp;nbsp;arr_mi&amp;nbsp;=&amp;nbsp;&lt;span style="color:#2b91af;"&gt;FormatterServices&lt;/span&gt;.GetSerializableMembers(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.GetType());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;FieldInfo&lt;/span&gt;&amp;nbsp;fi;
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;span style="color:green;"&gt;//isi&amp;nbsp;object&amp;nbsp;SerializationInfo&amp;nbsp;dengan&amp;nbsp;nilai&amp;nbsp;dari&amp;nbsp;semua&amp;nbsp;field&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//yang&amp;nbsp;ada&amp;nbsp;pada&amp;nbsp;derived&amp;nbsp;dengan&amp;nbsp;cara&amp;nbsp;enumerasi&lt;/span&gt;&lt;/b&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;var&lt;/span&gt;&amp;nbsp;v&amp;nbsp;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&amp;nbsp;arr_mi)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fi&amp;nbsp;=&amp;nbsp;(&lt;span style="color:#2b91af;"&gt;FieldInfo&lt;/span&gt;)v;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.AddValue(fi.Name,&amp;nbsp;fi.GetValue(&lt;span style="color:blue;"&gt;this&lt;/span&gt;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;nbsp;ToString()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:blue;"&gt;base&lt;/span&gt;.ToString()&amp;nbsp;+&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&amp;nbsp;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;SecondNumber&amp;nbsp;=&amp;nbsp;&amp;quot;&lt;/span&gt;&amp;nbsp;+&amp;nbsp;SecondNumber);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;br /&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span&gt;Program&lt;/span&gt;
{&amp;nbsp; &lt;br /&gt;    /*definition class Program*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&amp;nbsp;Main()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;Object&lt;/span&gt; d&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span&gt;DerivedISerializable&lt;/span&gt;(10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Serializer(d);       &lt;/font&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;span style="color:green;"&gt;&lt;br /&gt;        //nulling variable d &lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d&amp;nbsp;= Deserializer(&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;CacheStream);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;Console&lt;/span&gt;.WriteLine(d);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/01/implementasi-iserializable-pada-derived-type-yang-inherited-dari-base-type-non-iserializable.aspx&amp;amp;subject=Implementasi ISerializable pada Derived Type yang Inherited dari Base Type Non ISerializable" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/01/implementasi-iserializable-pada-derived-type-yang-inherited-dari-base-type-non-iserializable.aspx&amp;amp;t=Implementasi+ISerializable+pada+Derived+Type+yang+Inherited+dari+Base+Type+Non+ISerializable" target="_blank" title="Submit Implementasi ISerializable pada Derived Type yang Inherited dari Base Type Non ISerializable to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/01/implementasi-iserializable-pada-derived-type-yang-inherited-dari-base-type-non-iserializable.aspx&amp;amp;title=Implementasi+ISerializable+pada+Derived+Type+yang+Inherited+dari+Base+Type+Non+ISerializable" target="_blank" title="Submit Implementasi ISerializable pada Derived Type yang Inherited dari Base Type Non ISerializable to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/01/implementasi-iserializable-pada-derived-type-yang-inherited-dari-base-type-non-iserializable.aspx&amp;amp;phase=2" target="_blank" title="Submit Implementasi ISerializable pada Derived Type yang Inherited dari Base Type Non ISerializable to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/04/01/implementasi-iserializable-pada-derived-type-yang-inherited-dari-base-type-non-iserializable.aspx&amp;amp;title=Implementasi+ISerializable+pada+Derived+Type+yang+Inherited+dari+Base+Type+Non+ISerializable" target="_blank" title="Add Implementasi ISerializable pada Derived Type yang Inherited dari Base Type Non ISerializable to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192352" width="1" height="1"&gt;</description><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/ISerializable/default.aspx">ISerializable</category><category domain="http://geeks.netindonesia.net/blogs/adaapanya/archive/tags/Serialization/default.aspx">Serialization</category></item><item><title>KRITIK untuk ADMIN .netIndonesia. MOHON DIBACA</title><link>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/03/29/kritik-utk-admin-netindonesia-mohon-dibaca.aspx</link><pubDate>Tue, 29 Mar 2011 08:09:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:192318</guid><dc:creator>Agus Syahputra</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/rsscomments.aspx?PostID=192318</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/adaapanya/commentapi.aspx?PostID=192318</wfw:comment><comments>http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/03/29/kritik-utk-admin-netindonesia-mohon-dibaca.aspx#comments</comments><description>&lt;p&gt;&lt;font size="4" face="arial,helvetica,sans-serif"&gt;Sebelumnya maaf kalau postingan saya agak pedas. Tapi ini &lt;/font&gt;&lt;font size="4"&gt;demi kemajuan netindonesia.net.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;font size="4"&gt;&lt;b&gt;&lt;font color="#FF0000"&gt;Saya mau menanyakan sebenarnya komunitas ini(.netindonesia.net) ada yang ngurus gak sih.&lt;/font&gt;&lt;/b&gt;&lt;/font&gt; &lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;-Karena saya coba daftar di milis tapi gak pernah diapprove.&lt;br /&gt;-Kenapa selalu ada pesan download IE8 dihalaman depan, padahal saya menggunakan IE9.&lt;br /&gt;-Trus saya ada menjawab beberapa pertanyaan di forum tapi apa yang saya posting gak pernah diapprove, kan kasian yang udah nanya gak pernah dapat jawaban. &lt;br /&gt;-Saya juga promosiin komunitas ini di kaskus.us supaya semakin banyak yang join. Tapi ada yang bilang kalau dia sign up di sini gak pernah diapprove sampai sekarang.&lt;br /&gt;-Trus materi-materi juga sekarang udah sangat jarang sekali diupdate(contohnya channel geeks gak pernah ada update lagi)&lt;br /&gt;-Link Ebooks juga sering error, trus ebooknya gak ada(lebih bagus dihapus aja itu link).&lt;br /&gt;-Trus editor untuk nulis blog juga parah, saya mau ngepost malah habis waktu untuk nge-format postingan saya. Saya heran kenapa editor sperti itu yang digunakan inikan komunitas untuk developer programmming, dan orang-orang yang mau belajar jadi developer, jadi kalau mau nge-post source code malah jadi repot karena editornya terbatas(nggak bisa format otomatis untuk source code)&lt;br /&gt;-Kenapa alamat kontak(email address) para pengelola komunitas ini tidak ada, jadinya saya terpaksa posting di sini untuk menyampaikan masukan dan kritikan saya.&lt;br /&gt;-Halaman about juga gak ada.&lt;/font&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="4"&gt;Untuk admin dan para pengelola komunitas ini, tolong dong dibenerin nih komunitas. Inikan komunitas untuk para developer/profesional. Masak ngurus komunitasnya sendiri gak becus. Komunitas ini kan dijadiin resource bagi kita-kita yang mau belajar, tapi&amp;nbsp; kalau manajemennya seperti ini siapa yang mau belajar di sini(ibaratnya kita ngajarin orang buat website tapi kita sendiri gak becus buat website)&lt;/font&gt; &lt;br /&gt;&lt;/p&gt;&lt;font size="4"&gt;&lt;br /&gt;&lt;/font&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/03/29/kritik-utk-admin-netindonesia-mohon-dibaca.aspx&amp;amp;subject=KRITIK untuk ADMIN .netIndonesia. MOHON DIBACA" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/03/29/kritik-utk-admin-netindonesia-mohon-dibaca.aspx&amp;amp;t=KRITIK+untuk+ADMIN+.netIndonesia.+MOHON+DIBACA" target="_blank" title="Submit KRITIK untuk ADMIN .netIndonesia. MOHON DIBACA to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/03/29/kritik-utk-admin-netindonesia-mohon-dibaca.aspx&amp;amp;title=KRITIK+untuk+ADMIN+.netIndonesia.+MOHON+DIBACA" target="_blank" title="Submit KRITIK untuk ADMIN .netIndonesia. MOHON DIBACA to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/03/29/kritik-utk-admin-netindonesia-mohon-dibaca.aspx&amp;amp;phase=2" target="_blank" title="Submit KRITIK untuk ADMIN .netIndonesia. MOHON DIBACA to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/adaapanya/archive/2011/03/29/kritik-utk-admin-netindonesia-mohon-dibaca.aspx&amp;amp;title=KRITIK+untuk+ADMIN+.netIndonesia.+MOHON+DIBACA" target="_blank" title="Add KRITIK untuk ADMIN .netIndonesia. MOHON DIBACA to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=192318" width="1" height="1"&gt;</description></item></channel></rss>