Nine MVP's Blog

22/06/2006

การ Assign ค่าให้กับ member ใน class (C#) ระหว่าง Class

Filed under: Computers and Internet — Nine MVP @ 8:12 am
คำถาม

คือว่าผมมี class อยู่ 2 class ซึ่งทั้งสอง class นี้ถูก generate มาจาก schema (.xsd)

ซึ่งทั้งสอง class นี้ก็จะมี member ที่ชื่อเหมืนอกัน ยกตัวอย่างเช่น
A.CustomerID,B.CustomerID เป็นต้น
คือผมอยากเขียน function ที่ทำหน้ากำหนดค่าในคลาส A ที่มีชื่อ member เหมือนกันกับในคลาส B  
A.CustomerID = B.CustomerID แบบนี้ อ่ะครับ
ส่วนชื่อสมาชิกใน class ตัวไหนไม่เหมือนกัน ก็ไม่ต้องทำอะไร
คือว่ามันเยอะมากผมไม่อยากมานั่งพิมพ์เองเวลาเขียนโปรแกรมก็เลยอยากทำเป็น function ขึ้นมา
ไม่ทราบว่าต้องทำอย่างไรบ้างครับ ขอบคุณล่างหน้าครับ
 
 
ตอบ
 

รู้สึกข้อนี้จะต้องการ Function ที่หาชื่อของ Field Member ในแต่ละ Class มา assign ค่า จาก object ต้นทาง ไป object ปลายทาง ถ้าใช่ก็ให้ลองดู System.Reflection นะครับ

ทำตัวอย่างมาให้ดูนะ
 

class A

{

    public string mFName;

    public string mLName;

}

class B

{

    public string mFName;

    public string mLName;

}

 

Public Class AA

{

public void AA()

{

    A aa = new A();

    aa.mFName =

"ทดสอบ1";

    aa.mLName = "ทดสอบ2";

    B bb = new B();

    CloneField(aa, bb);

}

public bool CloneField(object objMaster, object objCopy)

{

    foreach (Reflection.FieldInfo om in objMaster.GetType.GetFields)

    {

        foreach (Reflection.FieldInfo oc in objCopy.GetType.GetFields)

        {

            if (om.Name == oc.Name & om.IsPublic & oc.IsPublic)

            {

                Type.GetType.InvokeMember(om.Name, Reflection.BindingFlags.SetField, null, objCopy, new object[] { om.GetValue(objMaster) });

            }

        }

    }

}

}

 

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.