fbpx

Object extensions

  • Wolfgang Riedmann
  • Wolfgang Riedmann's Avatar Topic Author
  • Offline
More
2 years 1 month ago - 2 years 1 month ago #1 by Wolfgang Riedmann
Object extensions was created by Wolfgang Riedmann
Hello,

I'm used from VO to write code that works dynamically. Therefore I have written several extension methods for the object class. Maybe this code helps someone:
using System                        
using System.Text
using System.Runtime.InteropServices
using System.Reflection 
using System.Diagnostics
using System.Collections.Generic

begin namespace rdm.BaseLib

class ObjectExtensions

	constructor()  
		super()
	return

static method IsMethod( self oObject as object, cMethod as string ) as logic
	local oType as System.Type
	local lReturn as logic
	
	if oObject == null_object
		lReturn		:= false
	else
		oType 		:= oObject:GetType()
		if oType:GetMethod( cMethod ) == null_object
			lReturn		:= false
		else
			lReturn		:= true
		endif
	endif
	
	return lReturn

static method Send( self oObject as object, cMethod as string, aParameters as object[] ) as object 
	local oType as System.Type
	local oReturn as object
	local oInfo as MethodInfo
	
	oType 				:= oObject:GetType()
	oReturn				:= null_object
	oInfo				:= oType:GetMethod( cMethod )
	if oInfo != null_object
		oReturn				:= oInfo:Invoke( oObject, aParameters )
	endif
	
	oType				:= null_object
	oInfo				:= null_object
	
	return oReturn              
	
static method ClassName( self oObject as object ) as string 
	local cReturn		as string
	
	cReturn				:= oObject:GetType():Name
	
	return cReturn	    
	
static method PropertyNames( self oObject as object ) as string[]
	local aReturn		as string[]
	local nLen			as int
	local nI			as int       
	local oProperties	as System.Reflection.PropertyInfo[]
                          
	oProperties		:= oObject:GetType():GetProperties()	
	nLen			:= oProperties:Length
	aReturn			:= string[]{nLen}
	for nI := 1 upto nLen
		aReturn[nI]		:= oProperties[nI]:Name
	next
	oProperties		:= null_object
		
	return aReturn	
	
static method IsProperty( self oObject as object, cPropertyName as string ) as logic
	local aProperties	as string[]
	local lReturn		as logic
	local nLen			as int
	local nI			as int       
	
	aProperties		:= PropertyNames( oObject )
	cPropertyName	:= cPropertyName:ToLower()
	nLen			:= aProperties:Length
	lReturn			:= false
	for nI := 1 upto nLen
		if aProperties[nI]:ToLower() == cPropertyName
			lReturn			:= true
			exit
		endif
	next
	
	return lReturn
	
static method FixPropertyName( self oObject as object, cPropertyName as string ) as string
	local aProperties	as string[]
	local cReturn		as string
	local nLen			as int
	local nI			as int       
	
	aProperties		:= PropertyNames( oObject )
	cPropertyName	:= cPropertyName:ToLower()
	nLen			:= aProperties:Length
	cReturn			:= cPropertyName
	for nI := 1 upto nLen
		if aProperties[nI]:ToLower() == cPropertyName
			cReturn			:= aProperties[nI]
			exit
		endif
	next
	
	return cReturn

static method GetPropertyValue( self oObject as object, cPropertyName as string ) as object
// Attention: the property name must respect the correct case!!!!
	local oReturn		as object	
	local oInfo			as System.Reflection.PropertyInfo
	
	oInfo			:= oObject:GetType():GetProperty( cPropertyName ) 
	if oInfo != null_object                                  
		oReturn			:= oInfo:GetValue( oObject, null_object ) 
	else
		oReturn			:= null_object
	endif
	
	return oReturn

static method SetPropertyValue( self oObject as object, cPropertyName as string, oValue as object ) as void
// Attention: the property name must respect the correct case!!!!
	local oInfo			as System.Reflection.PropertyInfo
	
	oInfo			:= oObject:GetType():GetProperty( cPropertyName ) 
	if oInfo != null_object
		oInfo:SetValue( oObject, oValue, null_object )                        
	endif
	
	return

end class

end namespace
Last edit: 2 years 1 month ago by Wolfgang Riedmann.

Please Log in or Create an account to join the conversation.