AddAttribute()

Namespace ›› System ›› MfObject ›› Methods ››
Parent Previous Next

AddAttribute()

instance.AddAttribute(attrib)

AddAttribute(attrib)

Adds MfAttribute extended items to extended classes

Parameters

attrib

The object instance derived from MfAttribute to add.

Throws

Throws MfNullReferenceException if class is not an instance.
Throws MfException containing innerException if unable to add MfAttribute to class instance.

Remarks

This method is intended to be used by derived classes only and is to be treated as a protected method.
MfNumberStyles class is an example of using this method to add MfFlagsAttribute to a class.
Protected method.

Related

MfAttribute, MfNumberStyles

Example

ItmLst := new MyItemList()
i := 0
Try
{
   While, i < 100
   {
       ran := Mfunc.Random(1, 100)
       if (Mod(ran, 2)) ; odd numbers
       {
           itm := new MyItem(A_TickCount)
           ItmLst.Add(itm)
       }
       else
       {
           itm := new MyItemCustom(A_TickCount)
           ItmLst.Add(itm)
       }
       i++
       sleep, 5
   }        
}
Catch e
{
   MsgBox, 16, Error, % e.Message
}

MsgBox, 64, Custom Items, % "Custom Item Count: " . ItmLst.CountCustom
MsgBox, 64, Total Items, % "Total Item Count: " . ItmLst.Count

; Now we will remove the first item in the list that has a custom attribute
iFirstCustom := -1
For i, Item in ItmLst
{
   if (Item.HasAttribute(CustomAttribute))
   {
       iFirstCustom := i
       break
   }
}
if (iFirstCustom > -1)
{
   ItmLst.RemoveAt(iFirstCustom)
   MsgBox, 64, Custom Items, % "Custom Item Count: " . ItmLst.CountCustom
   MsgBox, 64, Total Items, % "Total Item Count: " . ItmLst.Count
}

ExitApp

; Create a base Class
class MyItemBase extends MfObject
{
    __New(ID) {
           if (this.__Class = "MyItemBase") {
           throw new MfNotSupportedException(MfEnvironment.Instance.GetResourceString("NotSupportedException_AbstractClass"
               , "MyItemBase"))
       }
       base.__New()
       this.m_isInherited := True

       If (MfNull.IsNull(ID))
       {
               ex := new MfArgumentNullException("ID")
               ex.SetProp(A_LineFile, A_LineNumber, A_ThisFunc)
               Throw ex
       }

       Try
       {
               this.m_ItemID := MfInt64.GetValue(ID)
       }
       Catch e
       {
               ex := new MfArgumentException(MfEnvironment.Instance.GetResourceString("Arg_InvalidCastException"), e)
               ex.SetProp(A_LineFile, A_LineNumber, A_ThisFunc)
               Throw ex
       }
   }

   m_ItemID := Null
   ItemID[]
   {
       get {
           return this.m_ItemID
       }
       set {
           this.m_ItemID := MfInt64.GetValue(value)
           return this.m_ItemID
       }
   }
}

; Represents a General Item
class MyItem extends MyItemBase
{
   __New(ID) {
       base.__New(ID)
       this.m_isInherited := this.__Class != "MyItem"
   }
}

; Represents a Custom Item with Custom Attribute
class MyItemCustom extends MyItemBase
{
   __New(ID) {
       base.__New(ID)
       this.m_isInherited := this.__Class != "MyItemCustom"
       ; Add Custom Attribute Instance
       this.AddAttribute(CustomAttribute.Instance)
   }
}

; List Class that only accepts classes derived from MyItemBase
class MyItemList extends MfGenericList
{
   __New(ID) {
       base.__New(MyItemBase)
       this.m_isInherited := this.__Class != "MyItemList"
   }

   ; overrides MfGenericList Add
   Add(obj) {
           base.Add(obj)
           if (obj.HasAttribute(CustomAttribute))
           {
                   this.m_CountCustom ++
           }
   }

   ; overrides MfGenericList Remove
   Remove(obj) {
           RemovedItem := base.Remove(obj)
           if ((MfNull.IsNull(RemovedItem) = false) && (RemovedItem.HasAttribute(CustomAttribute)))
           {
                   this.m_CountCustom --
           }
   }

   ; overrides MfGenericList RemoveAt
   RemoveAt(index) {
           RemovedItem := base.RemoveAt(index)
           if ((MfNull.IsNull(RemovedItem) = false) && (RemovedItem.HasAttribute(CustomAttribute)))
           {
                   this.m_CountCustom --
           }
   }

   m_CountCustom := 0
   ; property that represents Items in list with CustomAttriube
   CountCustom[]
   {
       get {
           return this.m_CountCustom
       }
       set {
           ex := new MfNotSupportedException(MfEnvironment.Instance.GetResourceString("NotSupportedException_readonly_Property"))
           ex.SetProp(A_LineFile, A_LineNumber, A_ThisFunc)
           Throw ex
       }
   }
}

class CustomAttribute extends MfAttribute
{
   static _instance := "" ; Static var to contain the singleton instance

   __New() {
       base.__New()
       this.m_isInherited := this.__Class != "CustomAttribute"
   }

   ; Overrides MfSingletonBase
   DestroyInstance() {
      CustomAttribute._instance := Null ; Clears current instance and releases memory
   }

   ; Overrides MfSingletonBase
   GetInstance() {
       if (MfNull.IsNull(CustomAttribute._instance)) {
          CustomAttribute._instance := new CustomAttribute()
       }
       return CustomAttribute._instance
   }
}