Mono.CSharp.EventField.Define C# (CSharp) Method

Define() public method

public Define ( ) : bool
return bool
        public override bool Define()
        {
            var mod_flags_src = ModFlags;

            if (!base.Define ())
                return false;

            if (declarators != null) {
                if ((mod_flags_src & Modifiers.DEFAULT_ACCESS_MODIFER) != 0)
                    mod_flags_src &= ~(Modifiers.AccessibilityMask | Modifiers.DEFAULT_ACCESS_MODIFER);

                var t = new TypeExpression (MemberType, TypeExpression.Location);
                int index = Parent.PartialContainer.Events.IndexOf (this);
                foreach (var d in declarators) {
                    var ef = new EventField (Parent, t, mod_flags_src, new MemberName (d.Name.Value, d.Name.Location), OptAttributes);

                    if (d.Initializer != null)
                        ef.initializer = d.Initializer;

                    Parent.PartialContainer.Events.Insert (++index, ef);
                }
            }

            if (!HasBackingField) {
                SetIsUsed ();
                return true;
            }

            if (Add.IsInterfaceImplementation)
                SetIsUsed ();

            backing_field = new Field (Parent,
                new TypeExpression (MemberType, Location),
                Modifiers.BACKING_FIELD | Modifiers.COMPILER_GENERATED | Modifiers.PRIVATE | (ModFlags & (Modifiers.STATIC | Modifiers.UNSAFE)),
                MemberName, null);

            Parent.PartialContainer.AddField (backing_field);
            backing_field.Initializer = Initializer;
            backing_field.ModFlags &= ~Modifiers.COMPILER_GENERATED;

            // Call define because we passed fields definition
            backing_field.Define ();

            // Set backing field for event fields
            spec.BackingField = backing_field.Spec;

            return true;
        }

Usage Example

		public override bool Define()
		{
			var mod_flags_src = ModFlags;

			if (!base.Define ())
				return false;

			if (declarators != null) {
				if ((mod_flags_src & Modifiers.DEFAULT_ACCESS_MODIFER) != 0)
					mod_flags_src &= ~(Modifiers.AccessibilityMask | Modifiers.DEFAULT_ACCESS_MODIFER);

				var t = new TypeExpression (MemberType, TypeExpression.Location);
				foreach (var d in declarators) {
					var ef = new EventField (Parent, t, mod_flags_src, new MemberName (d.Name.Value, d.Name.Location), OptAttributes);

					if (d.Initializer != null)
						ef.initializer = d.Initializer;

					ef.Define ();
					Parent.PartialContainer.Members.Add (ef);
				}
			}

			if (!HasBackingField) {
				SetIsUsed ();
				return true;
			}

			if (Add.IsInterfaceImplementation)
				SetIsUsed ();

			backing_field = new Field (Parent,
				new TypeExpression (MemberType, Location),
				Modifiers.BACKING_FIELD | Modifiers.COMPILER_GENERATED | Modifiers.PRIVATE | (ModFlags & (Modifiers.STATIC | Modifiers.UNSAFE)),
				MemberName, null);

			Parent.PartialContainer.Members.Add (backing_field);
			backing_field.Initializer = Initializer;
			backing_field.ModFlags &= ~Modifiers.COMPILER_GENERATED;

			// Call define because we passed fields definition
			backing_field.Define ();

			// Set backing field for event fields
			spec.BackingField = backing_field.Spec;

			return true;
		}