@@ -782,6 +782,13 @@ public bool OptionNewFunctionEvaluationActive
782782 /// </summary>
783783 public bool OptionScriptNeedSemicolonAtTheEndOfLastExpression { get ; set ; } = true ;
784784
785+ /// <summary>
786+ /// If <c>true</c> Allow to access fields, properties and methods that are not declared public. (private, protected and internal)
787+ /// If <c>false</c> Allow to access only to public members.
788+ /// Default : false
789+ /// </summary>
790+ public bool OptionAllowNonPublicMembersAccess { get ; set ; }
791+
785792 #endregion
786793
787794 #region Reflection flags
@@ -794,6 +801,8 @@ protected virtual BindingFlags InstanceBindingFlag
794801
795802 if ( ! OptionCaseSensitiveEvaluationActive )
796803 flag |= BindingFlags . IgnoreCase ;
804+ if ( OptionAllowNonPublicMembersAccess )
805+ flag |= BindingFlags . NonPublic ;
797806
798807 return flag ;
799808 }
@@ -807,6 +816,8 @@ protected virtual BindingFlags StaticBindingFlag
807816
808817 if ( ! OptionCaseSensitiveEvaluationActive )
809818 flag |= BindingFlags . IgnoreCase ;
819+ if ( OptionAllowNonPublicMembersAccess )
820+ flag |= BindingFlags . NonPublic ;
810821
811822 return flag ;
812823 }
@@ -1769,7 +1780,7 @@ protected virtual bool EvaluateVarOrFunc(string expression, Stack<object> stack,
17691780
17701781 if ( inObject
17711782 || Context ? . GetType ( )
1772- . GetMethods ( )
1783+ . GetMethods ( InstanceBindingFlag )
17731784 . Any ( methodInfo => methodInfo . Name . Equals ( varFuncName , StringComparisonForCasing ) ) == true )
17741785 {
17751786 if ( inObject && ( stack . Count == 0 || stack . Peek ( ) is ExpressionOperator ) )
@@ -1945,10 +1956,10 @@ protected virtual bool EvaluateVarOrFunc(string expression, Stack<object> stack,
19451956 {
19461957 if ( inObject
19471958 || Context ? . GetType ( )
1948- . GetProperties ( )
1959+ . GetProperties ( InstanceBindingFlag )
19491960 . Any ( propInfo => propInfo . Name . Equals ( varFuncName , StringComparisonForCasing ) ) == true
19501961 || Context ? . GetType ( )
1951- . GetFields ( )
1962+ . GetFields ( InstanceBindingFlag )
19521963 . Any ( fieldInfo => fieldInfo . Name . Equals ( varFuncName , StringComparisonForCasing ) ) == true )
19531964 {
19541965 if ( inObject && ( stack . Count == 0 || stack . Peek ( ) is ExpressionOperator ) )
0 commit comments