4 using System.Diagnostics;
6 using System.Reflection;
7 using SiliconStudio.Core.Serialization.Serializers;
9 namespace SiliconStudio.Core
16 [DebuggerDisplay(
"{Name}")]
30 if (name == null)
throw new ArgumentNullException(
"name");
33 PropertyType = propertyType;
34 OwnerType = ownerType;
35 Metadatas = metadatas;
40 DefaultValueMetadata = (DefaultValueMetadata)metadata;
44 AccessorMetadata = (AccessorMetadata)metadata;
48 ValidateValueMetadata = (ValidateValueMetadata)metadata;
52 ObjectInvalidationMetadata = (ObjectInvalidationMetadata)metadata;
60 public string Name {
get;
protected set; }
67 get {
return defaultValueMetadata;}
70 defaultValueMetadata = value;
71 PropertyUpdateCallback = defaultValueMetadata.PropertyUpdateCallback;
95 internal PropertyContainer.PropertyUpdatedDelegate PropertyUpdateCallback {
get;
private set; }
108 public Type OwnerType {
get;
protected set; }
116 public Type PropertyType {
get;
protected set; }
118 public abstract bool IsValueType {
get; }
128 return string.Compare(Name, key.Name, StringComparison.OrdinalIgnoreCase);
131 internal abstract PropertyContainer.ValueHolder CreateValueHolder(
object value);
140 private readonly
static bool isValueType = typeof(T).GetTypeInfo().IsValueType;
149 : base(name, typeof(T), ownerType, GenerateDefaultData(metadatas))
154 public override bool IsValueType
156 get {
return isValueType; }
178 if (metadatas == null)
183 var defaultMetaData = metadatas.OfType<DefaultValueMetadata>().FirstOrDefault();
184 if (defaultMetaData == null)
186 var newMetaDatas =
new PropertyKeyMetadata[metadatas.Length + 1];
187 metadatas.CopyTo(newMetaDatas, 1);
188 newMetaDatas[0] =
new StaticDefaultValueMetadata<T>(
default(T));
195 internal override PropertyContainer.ValueHolder CreateValueHolder(
object value)
197 return new PropertyContainer.ValueHolder<
T>((
T)value);
DataSerializerGenericMode
Defines what generic parameters to pass to the serializer.
PropertyKey(string name, Type ownerType, params PropertyKeyMetadata[] metadatas)
Initializes a new instance of the PropertyKey{T} class.
int CompareTo(object obj)
_In_ size_t _In_ const TexMetadata & metadata
The type of the serialized type will be passed as a generic arguments of the serializer. Example: serializer of A becomes instantiated as Serializer{A}.
PropertyKey(string name, Type propertyType, Type ownerType, params PropertyKeyMetadata[] metadatas)
Initializes a new instance of the PropertyKey class.
A class that represents a tag propety.