AnyType
IAnyType is a description of container types that can hold values with type variance, such as interfacess.
/// <summary>Variant type can contain any type and value.</summary>
public interface IAnyType : IDataType, ICyclical
{
/// <summary>Constraint for assigned values of this variant container</summary>
IDataType? Constraint { get; set; }
}
IDataType └── IAnyType
AnyType is the default implementation.
IAnyType datatype = new AnyType
{
Name = Identities.CreateName("object").SetReadOnly(),
Annotations = { },
Unassignable = true,
Referable = true,
NetType = typeof(object),
Constraint = null
}.SetReadOnly();
IAnyType { Name = "object" , Nullable = True, Referable = True, Description = "", Annotations = [] }
AnyTypeRequest is used when sub-requests are needed.
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
AnyTypeRequest request = new AnyTypeRequest
{
Name = Identities.CreateName("object").SetReadOnly(),
Annotations = new Dictionary<string, string> { },
Unassignable = true,
Referable = true,
Constraint = new DataTypeRequest<NetRecord>(typeof(IMyInterface))
};
// Query
IAnyType datatype = service.GetRequired<IRequestFor<IAnyType>, IAnyType>(request);
DataTypeRequest<NetAny> returns IAnyType for interface 'target'. (Avalanche.DataType.Net.dll)
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
var request = new DataTypeRequest<NetAny>(typeof(IMyInterface));
// Query
IDataType datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
public interface IMyInterface
{
public string Name { get; set; }
}
object : IAnyType └── Constraint = anytype+IMyInterface, docs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null : IRecordType └── Fields[0] = Name : IFieldType └── Value = string : IStringType └── Element = char : IIntegerType
DataTypeRequest<NetAny> returns IAnyType for non-sealed class 'target'.
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
var request = new DataTypeRequest<NetAny>(typeof(MyBaseClass));
// Query
IDataType datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
public class MyBaseClass
{
public string? Name { get; set; }
}
anytype+MyBaseClass, docs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null : IAnyType └── Constraint = anytype+MyBaseClass, docs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null : IRecordType └── Fields[0] = Name : IFieldType └── Value = string : IStringType └── Element = char : IIntegerType
DataTypeRequest<NetAny> is request for any type. The resolved 'target' argument is assigned to .Constraint property.
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
var request = new DataTypeRequest<NetAny>(typeof(object));
// Query
IDataType datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
System.Collections.Generic.IList`1, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e[[System.Int32, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]] : IAnyType └── Constraint = System.Collections.Generic.IList`1[[System.Int32]] : IListType └── Element = int : IIntegerType
DataTypes contains type definitions for any type definitions.
// System.Object
IAnyType datatype0 = DataTypes.Any.Instance;
// Avalanche.Any
IAnyType datatype1 = DataTypes.Variant.Instance;
Full Example
Full example
using System.Collections.Generic;
using Avalanche.DataType;
using Avalanche.Identity;
using Avalanche.Service;
using Avalanche.Utilities;
using static System.Console;
public class anytype
{
public static void Run()
{
{
// <01>
IAnyType datatype = new AnyType
{
Name = Identities.CreateName("object").SetReadOnly(),
Annotations = { },
Unassignable = true,
Referable = true,
NetType = typeof(object),
Constraint = null
}.SetReadOnly();
// </01>
// Print
WriteLine(datatype.PrintTree(format: DataTypePrintTreeExtensions.PrintFormat.DefaultLong));
}
{
// <03>
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
AnyTypeRequest request = new AnyTypeRequest
{
Name = Identities.CreateName("object").SetReadOnly(),
Annotations = new Dictionary<string, string> { },
Unassignable = true,
Referable = true,
Constraint = new DataTypeRequest<NetRecord>(typeof(IMyInterface))
};
// Query
IAnyType datatype = service.GetRequired<IRequestFor<IAnyType>, IAnyType>(request);
// </03>
// Print
WriteLine(datatype.PrintTree(format: DataTypePrintTreeExtensions.PrintFormat.Default));
}
{
// <04>
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
var request = new DataTypeRequest<NetAny>(typeof(IMyInterface));
// Query
IDataType datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
// </04>
// Print
WriteLine(datatype.PrintTree(format: DataTypePrintTreeExtensions.PrintFormat.Default));
}
{
// <05>
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
var request = new DataTypeRequest<NetAny>(typeof(MyBaseClass));
// Query
IDataType datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
// </05>
// Print
WriteLine(datatype.PrintTree(format: DataTypePrintTreeExtensions.PrintFormat.Default));
}
{
// <06>
// Create service
IService service = Services.Create(NetTypeHandlers.Instance);
// Create request
var request = new DataTypeRequest<NetAny>(typeof(object));
// Query
IDataType datatype = service.GetRequired<IDataTypeRequest, IDataType>(request);
// </06>
// Print
WriteLine(datatype.PrintTree(format: DataTypePrintTreeExtensions.PrintFormat.Default));
}
{
// <10>
// System.Object
IAnyType datatype0 = DataTypes.Any.Instance;
// Avalanche.Any
IAnyType datatype1 = DataTypes.Variant.Instance;
// </10>
}
}
// <100>
public interface IMyInterface
{
public string Name { get; set; }
}
// </100>
// <101>
public class MyBaseClass
{
public string? Name { get; set; }
}
// </101>
}