IParameterDescription
IParameterDescription describes source of value for a field during construction.
/// <summary>Function or Constructor parameter description</summary>
public interface IParameterDescription : IAnnotable
{
/// <summary>Parameter name, <see cref="string"/> or <![CDATA[IIdentity]]>.</summary>
object Name { get; set; }
/// <summary>Parameter type</summary>
Type Type { get; set; }
/// <summary>Describes parameter writer: <see cref="ParameterInfo"/></summary>
object? Writer { get; set; }
/// <summary>Function or constructor which parameter is member of, as <see cref="IConstructorDescription"/>.</summary>
IConstructorDescription? Member { get; set; }
/// <summary>Parameter is optional</summary>
bool? Optional { get; set; }
}
ParameterDescription is the default implementation.
IParameterDescription parameterDescription = new ParameterDescription
{
Name = "arg",
Type = typeof(int),
Writer = null!,
Annotations = new object[0],
Member = null,
Optional = false
}.SetReadOnly();
Each field can be assigned with extension method.
IParameterDescription parameterDescription =
new ParameterDescription()
.SetName("arg")
.SetType(typeof(int))
.SetWriter(null)
.SetAnnotations(new object[0])
.SetMember(null)
.SetOptional(false)
.SetReadOnly();
.Clone() makes a copy.
IParameterDescription clone = parameterDescription.Clone().SetReadOnly();
.Read() reads description from ParameterInfo, FieldInfo and PropertyInfo.
// Get reference
ParameterInfo pi = typeof(MyClass).GetConstructors()[0].GetParameters()[0];
// Read
IParameterDescription parameterDescription =
new ParameterDescription()
.Read(pi)
.SetReadOnly();
public class MyClass
{
public int value;
public MyClass(int value)
{
this.value = value;
}
}
Full Example
Full example
using System.Reflection;
using Avalanche.Utilities;
using Avalanche.Utilities.Record;
class parameterdescription
{
public static void Run()
{
{
// <01>
IParameterDescription parameterDescription = new ParameterDescription
{
Name = "arg",
Type = typeof(int),
Writer = null!,
Annotations = new object[0],
Member = null,
Optional = false
}.SetReadOnly();
// </01>
}
{
// <02>
IParameterDescription parameterDescription =
new ParameterDescription()
.SetName("arg")
.SetType(typeof(int))
.SetWriter(null)
.SetAnnotations(new object[0])
.SetMember(null)
.SetOptional(false)
.SetReadOnly();
// </02>
// <03>
IParameterDescription clone = parameterDescription.Clone().SetReadOnly();
// </03>
}
{
// <04>
// Get reference
ParameterInfo pi = typeof(MyClass).GetConstructors()[0].GetParameters()[0];
// Read
IParameterDescription parameterDescription =
new ParameterDescription()
.Read(pi)
.SetReadOnly();
// </04>
}
}
// <10>
public class MyClass
{
public int value;
public MyClass(int value)
{
this.value = value;
}
}
// </10>
}