Func<Record, Record>
RecordCloneFunc.TryCreateRecordCloneFunc(this recordDescription, out delegate) creates Func<Record, Record> cloner. Cloner is shallow and makes value and reference copies.
// Create description
IRecordDescription recordDescription = RecordDescription.Create[typeof(MyStruct)];
// Create delegate
recordDescription.TryCreateRecordCloneFunc(out Delegate @delegate);
// Cast delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)@delegate;
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
public struct MyStruct
{
public int value;
public MyStruct(int value)
{
this.value = value;
}
}
RecordCloneFunc.Clone[recordDescription] is a provider that creates cloner delegate from record description.
// Create description
IRecordDescription recordDescription = RecordDescription.Create[typeof(MyStruct)];
// Create delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)RecordCloneFunc.Create[recordDescription];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
RecordCloneFunc.Cached[recordDescription] is a provider that creates and caches cloner delegate from record description.
// Create description
IRecordDescription recordDescription = RecordDescription.Cached[typeof(MyStruct)];
// Create delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)RecordCloneFunc.Cached[recordDescription];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
RecordCloneFunc.CloneFromType[type] is a provider that creates cloner delegate from type.
// Create delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)RecordCloneFunc.CreateFromType[typeof(MyStruct)];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
RecordCloneFunc.CachedFromType[type] is a provider that creates and caches cloner delegate from type.
// Create delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)RecordCloneFunc.CachedFromType[typeof(MyStruct)];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
Func<object[], object>
RecordCloneFuncOO.TryCreateRecordCloneOO(this recordDescription, out delegate) creates Func<object, object> cloner.
// Create description
IRecordDescription recordDescription = RecordDescription.Create[typeof(MyStruct)];
// Create delegate
recordDescription.TryCreateRecordCloneFuncOO(out Func<object, object> recordCloner);
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
RecordCloneFuncOO.Clone[recordDescription] is a provider that creates cloner delegate from record description.
// Create description
IRecordDescription recordDescription = RecordDescription.Create[typeof(MyStruct)];
// Create delegate
Func<object, object> recordCloner = RecordCloneFuncOO.Create[recordDescription];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
RecordCloneFuncOO.Cached[recordDescription] is a provider that creates and caches cloner delegate from record description.
// Create description
IRecordDescription recordDescription = RecordDescription.Cached[typeof(MyStruct)];
// Create delegate
Func<object, object> recordCloner = RecordCloneFuncOO.Cached[recordDescription];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
RecordCloneFuncOO.CloneFromType[type] is a provider that creates cloner delegate from type.
// Create delegate
Func<object, object> recordCloner = RecordCloneFuncOO.CreateFromType[typeof(MyStruct)];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
RecordCloneFuncOO.CachedFromType[type] is a provider that creates and caches cloner delegate from type.
// Create delegate
Func<object, object> recordCloner = RecordCloneFuncOO.CachedFromType[typeof(MyStruct)];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
Full Example
Full example
using System;
using System.Reflection;
using Avalanche.Utilities.Record;
using static System.Console;
class recordclone
{
public static void Run()
{
// Func<object[], Record>
{
// <00>
// Create description
IRecordDescription recordDescription = RecordDescription.Create[typeof(MyStruct)];
// Create delegate
recordDescription.TryCreateRecordCloneFunc(out Delegate @delegate);
// Cast delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)@delegate;
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </00>
}
{
// <01>
// Create description
IRecordDescription recordDescription = RecordDescription.Create[typeof(MyStruct)];
// Create delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)RecordCloneFunc.Create[recordDescription];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </01>
}
{
// <02>
// Create description
IRecordDescription recordDescription = RecordDescription.Cached[typeof(MyStruct)];
// Create delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)RecordCloneFunc.Cached[recordDescription];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </02>
}
{
// <03>
// Create delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)RecordCloneFunc.CreateFromType[typeof(MyStruct)];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </03>
}
{
// <04>
// Create delegate
Func<MyStruct, MyStruct> recordCloner = (Func<MyStruct, MyStruct>)RecordCloneFunc.CachedFromType[typeof(MyStruct)];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </04>
}
// Func<object, object>
{
// <10>
// Create description
IRecordDescription recordDescription = RecordDescription.Create[typeof(MyStruct)];
// Create delegate
recordDescription.TryCreateRecordCloneFuncOO(out Func<object, object> recordCloner);
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </10>
}
{
// <11>
// Create description
IRecordDescription recordDescription = RecordDescription.Create[typeof(MyStruct)];
// Create delegate
Func<object, object> recordCloner = RecordCloneFuncOO.Create[recordDescription];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </11>
}
{
// <12>
// Create description
IRecordDescription recordDescription = RecordDescription.Cached[typeof(MyStruct)];
// Create delegate
Func<object, object> recordCloner = RecordCloneFuncOO.Cached[recordDescription];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </12>
}
{
// <13>
// Create delegate
Func<object, object> recordCloner = RecordCloneFuncOO.CreateFromType[typeof(MyStruct)];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </13>
}
{
// <14>
// Create delegate
Func<object, object> recordCloner = RecordCloneFuncOO.CachedFromType[typeof(MyStruct)];
// Create record
MyStruct myStruct = new MyStruct(10);
// Clone record
MyStruct clone = (MyStruct)recordCloner(myStruct);
// Print value
WriteLine(clone.value); // 10
// </14>
}
}
// <101>
public struct MyStruct
{
public int value;
public MyStruct(int value)
{
this.value = value;
}
}
// </101>
}