インスタンスの複製

Namespace: FVIL
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public virtual Object CopyFrom(
	Object object
)
Visual Basic
Public Overridable Function CopyFrom ( 
	object As Object
) As Object

Parameters

object
Type: System..::..Object
複製元のインスタンス

Return Value

Type: Object
複製後の自身のインスタンスを返します。

Implements

IFviCopyable..::..CopyFrom(Object)

Remarks

引数に指定されたインスタンスの内容をこのインスタンスへ複製します。
異なる型からの変換については、このクラスの説明 の "データ変換" の項をご参照ください。

対応しない型や null が指定された場合は System の例外が発行されます。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。


エラーコード:
ErrorCode メンバ内容
1FVIL.ErrorCode.FAILED_TO_ALLOCATE領域の確保に失敗しました。
11FVIL.ErrorCode.INVALID_PARAMETER引数に指定されたインスタンスが不正です。

Examples

ソースコード:
C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace User.SampleCode.Array
{
    public partial class DPNT_T_ARRAY
    {
        /// <summary>
        /// インスタンスの複製 (固定長配列).
        /// </summary>
        [FvPluginExecute]
        public void CopyFrom_Array()
        {
            int countOrg = 10;

            // 0) 配列の作成.
            fvalgcli.DPNT_T[] datas = new fvalgcli.DPNT_T[countOrg];
            for (int i = 0; i < countOrg; i++)
            {
                datas[i].x = i * 10 + i;
                datas[i].y = i * 10 + i;
            }

            // 1) インスタンスの準備と生成.
            FVIL.DPNT_T_ARRAY src1 = new FVIL.DPNT_T_ARRAY(datas);
            FVIL.DPNT_T_ARRAY src2 = new FVIL.DPNT_T_ARRAY();

            // 2) 複製.
            src2.CopyFrom(src1);

            // 3) 確認.
            Assert.IsTrue(src1.Count == src2.Count, "src2.Count = {0}", src2.Count);
            fvalgcli.DPNT_T_PTR ptr1 = src1.Address;
            fvalgcli.DPNT_T_PTR ptr2 = src2.Address;
            for (int i = 0; i < src1.Count; i++)
            {
                Assert.IsTrue( ptr1[0].x == ptr2[0].x
                            && ptr1[0].y == ptr2[0].y,
                            "src2[{0}]: x={1},y={2})", i, ptr2[0].x, ptr2[0].y);

                ptr1 += 1;
                ptr2 += 1;
            }
        }

        /// <summary>
        /// インスタンスの複製 (可変長リスト).
        /// </summary>
        [FvPluginExecute]
        public void CopyFrom_List()
        {
            int countOrg = 10;

            // 0) 配列の作成.
            List<fvalgcli.DPNT_T> list = new List<fvalgcli.DPNT_T>(countOrg);

            for (int i = 0; i < countOrg; i++)
            {
                list.Add( fvalgcli.DPNT_T.init( i * 10 + i, i * 10 + i));
            }

            // 1) インスタンスの準備と生成.
            FVIL.DPNT_T_ARRAY src1 = new FVIL.DPNT_T_ARRAY(list);
            FVIL.DPNT_T_ARRAY src2 = new FVIL.DPNT_T_ARRAY();

            // 2) 複製.
            src2.CopyFrom(src1);

            // 3) 確認.
            Assert.IsTrue(src1.Count == src2.Count, "src2.Count = {0}", src2.Count);
            fvalgcli.DPNT_T_PTR ptr1 = src1.Address;
            fvalgcli.DPNT_T_PTR ptr2 = src2.Address;
            for (int i = 0; i < src1.Count; i++)
            {
                Assert.IsTrue(ptr1[0].x == ptr2[0].x
                            && ptr1[0].y == ptr2[0].y,
                            "src2[{0}]: x={1},y={2})", i, ptr2[0].x, ptr2[0].y);
                ptr1 += 1;
                ptr2 += 1;
            }
        }
    }
}


Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Namespace SampleCode.Array
    Public Partial Class DPNT_T_ARRAY
        ''' <summary>
        ''' インスタンスの複製 (固定長配列).
        ''' </summary>
        <FvPluginExecute> _
        Public Sub CopyFrom_Array()
            Dim countOrg As Integer = 10

            ' 0) 配列の作成.
            Dim datas As fvalgcli.DPNT_T() = New fvalgcli.DPNT_T(countOrg - 1) {}
            For i As Integer = 0 To countOrg - 1
                datas(i).x = i * 10 + i
                datas(i).y = i * 10 + i
            Next

            ' 1) インスタンスの準備と生成.
            Dim src1 As New FVIL.DPNT_T_ARRAY(datas)
            Dim src2 As New FVIL.DPNT_T_ARRAY()

            ' 2) 複製.
            src2.CopyFrom(src1)

            ' 3) 確認.
            Assert.IsTrue(src1.Count = src2.Count, "src2.Count = {0}", src2.Count)
            Dim ptr1 As fvalgcli.DPNT_T_PTR = src1.Address
            Dim ptr2 As fvalgcli.DPNT_T_PTR = src2.Address
            For i As Integer = 0 To src1.Count - 1
                Assert.IsTrue(ptr1(0).x = ptr2(0).x AndAlso ptr1(0).y = ptr2(0).y, "src2[{0}]: x={1},y={2})", i, ptr2(0).x, ptr2(0).y)

                ptr1 += 1
                ptr2 += 1
            Next
        End Sub

        ''' <summary>
        ''' インスタンスの複製 (可変長リスト).
        ''' </summary>
        <FvPluginExecute> _
        Public Sub CopyFrom_List()
            Dim countOrg As Integer = 10

            ' 0) 配列の作成.
            Dim list As New List(Of fvalgcli.DPNT_T)(countOrg)

            For i As Integer = 0 To countOrg - 1
                list.Add(fvalgcli.DPNT_T.init(i * 10 + i, i * 10 + i))
            Next

            ' 1) インスタンスの準備と生成.
            Dim src1 As New FVIL.DPNT_T_ARRAY(list)
            Dim src2 As New FVIL.DPNT_T_ARRAY()

            ' 2) 複製.
            src2.CopyFrom(src1)

            ' 3) 確認.
            Assert.IsTrue(src1.Count = src2.Count, "src2.Count = {0}", src2.Count)
            Dim ptr1 As fvalgcli.DPNT_T_PTR = src1.Address
            Dim ptr2 As fvalgcli.DPNT_T_PTR = src2.Address
            For i As Integer = 0 To src1.Count - 1
                Assert.IsTrue(ptr1(0).x = ptr2(0).x AndAlso ptr1(0).y = ptr2(0).y, "src2[{0}]: x={1},y={2})", i, ptr2(0).x, ptr2(0).y)
                ptr1 += 1
                ptr2 += 1
            Next
        End Sub
    End Class
End Namespace

Exceptions

ExceptionCondition
System..::..InvalidCastException引数に指定されたインスタンスをこのクラスの型に変換できません。
System..::..NullReferenceException引数に null が指定されました。
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also