diff Source/Reflection/Emit/ConstructorBuilderHelper.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/Reflection/Emit/ConstructorBuilderHelper.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,62 @@
+using System;
+using System.Reflection.Emit;
+
+namespace BLToolkit.Reflection.Emit
+{
+	/// <summary>
+	/// A wrapper around the <see cref="ConstructorBuilder"/> class.
+	/// </summary>
+	public class ConstructorBuilderHelper : MethodBuilderBase
+	{
+		/// <summary>
+		/// Initializes a new instance of the <see cref="ConstructorBuilder"/> class
+		/// with the specified parameters.
+		/// </summary>
+		/// <param name="typeBuilder">Associated <see cref="TypeBuilderHelper"/>.</param>
+		/// <param name="constructorBuilder">A <see cref="ConstructorBuilder"/></param>
+		public ConstructorBuilderHelper(TypeBuilderHelper typeBuilder, ConstructorBuilder constructorBuilder)
+			: base(typeBuilder)
+		{
+			if (constructorBuilder == null) throw new ArgumentNullException("constructorBuilder");
+
+			_constructorBuilder = constructorBuilder;
+			_constructorBuilder.SetCustomAttribute(Type.Assembly.BLToolkitAttribute);
+		}
+
+		private readonly ConstructorBuilder _constructorBuilder;
+		/// <summary>
+		/// Gets ConstructorBuilder.
+		/// </summary>
+		public           ConstructorBuilder  ConstructorBuilder
+		{
+			get { return _constructorBuilder; }
+		}
+
+		/// <summary>
+		/// Converts the supplied <see cref="ConstructorBuilderHelper"/> to a <see cref="MethodBuilder"/>.
+		/// </summary>
+		/// <param name="constructorBuilder">The <see cref="ConstructorBuilder"/>.</param>
+		/// <returns>A <see cref="ConstructorBuilder"/>.</returns>
+		public static implicit operator ConstructorBuilder(ConstructorBuilderHelper constructorBuilder)
+		{
+			if (constructorBuilder == null) throw new ArgumentNullException("constructorBuilder");
+
+			return constructorBuilder.ConstructorBuilder;
+		}
+
+		private EmitHelper _emitter;
+		/// <summary>
+		/// Gets <see cref="EmitHelper"/>.
+		/// </summary>
+		public override EmitHelper Emitter
+		{
+			get
+			{
+				if (_emitter == null)
+					_emitter = new EmitHelper(this, _constructorBuilder.GetILGenerator());
+
+				return _emitter;
+			}
+		}
+	}
+}