Pada artikel ini, kita akan membahas mengenai keterampilan dinamis dalam bahasa C#. Kami akan menggunakan contoh kasus sederhana untuk menjelaskan konsep tersebut. Selain itu, kami juga akan menampilkan contoh implementasinya.
Mengapa Keterampilan Dinamis Diperlukan?
Dalam pengembangan aplikasi, kita seringkali memerlukan kemampuan untuk membuat objek yang dapat diisi dengan nilai-nilai dari berbagai sumber. Contohnya, kita memiliki tabel database yang berisi data tentang pelanggan, dan kita ingin membuat objek yang dapat menampilkan informasi tersebut.
Menggunakan Dictionary untuk Membuat Keterampilan Dinamis
Pada artikel ini, kita akan menggunakan kelas myDynObj
yang akan kita buat sendiri. Kelas ini akan memiliki property dinamis yang dapat diisi dengan nilai-nilai dari dictionary. Berikut adalah implementasinya:
public class myDynObj : DynamicObject
{
private Dictionary<string, object> internalDict = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, ref object result)
{
return internalDict.TryGetValue(binder.Name, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
internalDict[binder.Name] = value;
return true;
}
}
Kelas myDynObj
ini akan memiliki property dinamis yang dapat diisi dengan nilai-nilai dari dictionary. Kita dapat menambahkan property baru dengan menggunakan metode AddProperty
.
Menggunakan Keterampilan Dinamis
Berikut adalah contoh penggunaan keterampilan dinamis:
Dim testTable As New DataTable("TheTable")
testTable.Columns.Add("foo")
testTable.Columns.Add("bar")
testTable.Columns.Add("Blargh")
Dim columnNames As New List(Of String)(From column As DataColumn In testTable.Columns Select column.ColumnName)
Dim m As Object = New myDynObj()
columnNames.ForEach(Sub(x) DirectCast(m, myDynObj).AddProperty(x))
Console.WriteLine(String.Format("The current properties of the object are as follows: {0}", String.Join(", ", DirectCast(m, myDynObj).GetDynamicMemberNames.Cast(Of String))))
m.foo = "hoopla" : m.Blargh = 654219 : m.waffles = "I'm New!"
Console.WriteLine("And now the values are:")
DirectCast(m, myDynObj).GetDynamicMemberNames.ToList.ForEach(Sub(x) Console.WriteLine(String.Format("{0}, {1}", x, CallByName(m, x, CallType.Get, Nothing))))
Pada contoh di atas, kita membuat objek myDynObj
dan menambahkan property dinamis dengan nama yang sesuai dengan kolom-kolom dalam tabel. Kita kemudian mengisi nilai-nilai pada property tersebut.
SCATTER Command
Berikut adalah contoh SCATTER command:
4,SCATTER Command
Purpose
Assign new values to the contents of one or more fields in the current record.
Syntax
SCATTER [FIELDS <idFieldList> | FIELDS LIKE <Skeleton>
| FIELDS EXCEPT <Skeleton>] [MEMO] [BLANK]
| TO ArrayName | MEMVAR
| NAME ObjectName [ADDITIVE]
Arguments
FIELDS <idFieldList>The list of fields to process. The default is all fields with the exception of memo fields, unless the command supports the MEMO clause.
SCATTER command digunakan untuk mengisi nilai-nilai pada field-field dalam sebuah record. Kita dapat menentukan field-field yang akan diisi dengan menggunakan klausa FIELDS.
Contoh Penggunaan
Berikut adalah contoh penggunaan SCATTER command:
Dim testTable As New DataTable("TheTable")
testTable.Columns.Add("foo")
testTable.Columns.Add("bar")
testTable.Columns.Add("Blargh")
Dim m As Object = New myDynObj()
columnNames.ForEach(Sub(x) DirectCast(m, myDynObj).AddProperty(x))
testTable.Rows.Add(m.foo, m.bar, m.Blargh)
Console.WriteLine("XML result:")
Using sw As New StreamWriter(Console.OpenStandardOutput())
sw.AutoFlush = True
Console.SetOut(sw)
testTable.WriteXml(sw, XmlWriteMode.WriteSchema)
End Using
Console.ReadLine()
Pada contoh di atas, kita menggunakan SCATTER command untuk mengisi nilai-nilai pada field-field dalam sebuah record. Kita kemudian menulis hasilnya ke dalam file XML.
Dengan demikian, kita telah membahas mengenai keterampilan dinamis dan SCATTER command. Keterampilan dinamis dapat digunakan untuk membuat objek yang dapat diisi dengan nilai-nilai dari berbagai sumber, sedangkan SCATTER command digunakan untuk mengisi nilai-nilai pada field-field dalam sebuah record.