[Python.NET] Binding to a DynamicObject

"Taylor, Guy" <Guy.Taylor-80FzrdUioJPSUeElwK9/[email protected]> Wed, 23 Feb 2022 01:58:24 +0000
Newsgroups gmane.comp.python.dotnet
Message-ID <BY5PR13MB3778E132E27EAB387AFB8E33F63C9@BY5PR13MB3778.namprd13.prod.outlook.com>
--===============0136734142750045878==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_BY5PR13MB3778E132E27EAB387AFB8E33F63C9BY5PR13MB3778namp_"

--_000_BY5PR13MB3778E132E27EAB387AFB8E33F63C9BY5PR13MB3778namp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi there,
I'm new to the list, and fairly new to python integration with C#, so I was=
 hoping someone could help me.

I am trying to bind a c# class (which is derived DynamicObject) to Pythonne=
t  but can't get the dynamic aspect working.

In the following Code, the line : AppBind.Description("layout")
works fine and calls the C# method: public void Description(string str)

But AppBind.DynMethod(123)
throws an error stating the method doesn't exist (I was hoping this would b=
e called: public override bool TryInvokeMember(InvokeMemberBinder binder, o=
bject[] args, out object result)

And AppBind.Fred =3D 123
Assigns 123 to a python variable Fred, when I was hoping it would call: pub=
lic override bool TrySetMember(SetMemberBinder binder, object value)


Is there a way to make this work?
The closest I've found is this page, but I couldn't work it out: https://gi=
thub.com/pythonnet/pythonnet/issues/72

Thank you
Guy




Here is the python snippet:

AppBind =3D PythonSpace.PythonCallbacks()

def DoStuff():

    AppBind.Description("layout")
    AppBind.DynMethod(123)
    AppBind.Fred =3D 123

Here is the C# code: (This is derived from the the DynamicDictionary exampl=
e )

public class PythonCallbacks : System.Dynamic.DynamicObject
{
// The inner dictionary.
        Dictionary<string, object> dictionary =3D new Dictionary<string, ob=
ject>();

        public void Description(string str)
        {

        }

        public override bool TryInvokeMember(InvokeMemberBinder binder, obj=
ect[] args, out object result)
        {
            return base.TryInvokeMember(binder, args, out result);
        }

        // If you try to get a value of a property
        // not defined in the class, this method is called.
        public override bool TryGetMember(GetMemberBinder binder, out objec=
t result)
        {
            // Converting the property name to lowercase
            // so that property names become case-insensitive.
            string name =3D binder.Name.ToLower();

            // If the property name is found in a dictionary,
            // set the result parameter to the property value and return tr=
ue.
            // Otherwise, return false.
            return dictionary.TryGetValue(name, out result);
        }

        // If you try to set a value of a property that is
        // not defined in the class, this method is called.
        public override bool TrySetMember(SetMemberBinder binder, object va=
lue)
        {
            // Converting the property name to lowercase
            // so that property names become case-insensitive.
            dictionary[binder.Name.ToLower()] =3D value;

            // You can always add a value to a dictionary,
            // so this method always returns true.
            return true;
        }

    }
}





--_000_BY5PR13MB3778E132E27EAB387AFB8E33F63C9BY5PR13MB3778namp_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#0563C1;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri",sans-serif;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal">Hi there,<o:p></o:p></p>
<p class=3D"MsoNormal">I&#8217;m new to the list, and fairly new to python =
integration with C#, so I was hoping someone could help me.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">I am trying to bind a c# class (which is derived Dyn=
amicObject) to Pythonnet &nbsp;but can&#8217;t get the dynamic aspect worki=
ng.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">In the following Code, the line : <span style=3D"fon=
t-family:&quot;Courier New&quot;">
AppBind.Description(&quot;layout&quot;)<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none">works fine and calls t=
he C# method:
<span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">public</spa=
n><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">void=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> De=
scription(</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:=
blue">string</span><span style=3D"font-size:9.5pt;font-family:Consolas;colo=
r:black">
 str)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">But <span style=3D"font-family:&quot;Courier New&quo=
t;">AppBind.DynMethod(123)<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none">throws an error statin=
g the method doesn&#8217;t exist (I was hoping this would be called:
<span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">public</spa=
n><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">over=
ride</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"=
>
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">bool=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> Tr=
yInvokeMember(InvokeMemberBinder binder,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">[=
] args,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">out<=
/span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> =
result)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">And <span style=3D"font-family:&quot;Courier New&quo=
t;">AppBind.Fred =3D 123<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none">Assigns 123 to a pytho=
n variable Fred, when I was hoping it would call:
<span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">public</spa=
n><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">over=
ride</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"=
>
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">bool=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> Tr=
ySetMember(SetMemberBinder binder,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> =
value)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">Is there a way to make this work?<o:p></o:p></p>
<p class=3D"MsoNormal">The closest I&#8217;ve found is this page, but I cou=
ldn&#8217;t work it out:
<a href=3D"https://github.com/pythonnet/pythonnet/issues/72">https://github=
.com/pythonnet/pythonnet/issues/72</a><o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:9.5pt;font-family:Consolas;=
color:black">Thank you<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:9.5pt;font-family:Consolas;=
color:black">Guy<o:p></o:p></span></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">Here is the python snippet:<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
AppBind =3D PythonSpace.PythonCallbacks()<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp; <o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
def DoStuff():<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
<o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp; AppBind.Description(&quot;layout&quot;)<o:p></o:p></span=
></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp; AppBind.DynMethod(123)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp; AppBind.Fred =3D 123<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
<o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal">Here is the C# code: (This is derived from the the D=
ynamicDictionary example )<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:blue">public</span><span style=3D"font-=
size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">clas=
s</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:#2B91AF">P=
ythonCallbacks</span><span style=3D"font-size:9.5pt;font-family:Consolas;co=
lor:black"> : System.Dynamic.DynamicObject<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">{<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-indent:.5in;text-autospace:none"><span=
 style=3D"font-size:9.5pt;font-family:Consolas;color:green">// The inner di=
ctionary.</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:b=
lack"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; Dictionary&lt;</span><span style=3D"font-size:9.5pt;font-family:=
Consolas;color:blue">string</span><span style=3D"font-size:9.5pt;font-famil=
y:Consolas;color:black">,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">&=
gt; dictionary =3D
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">new<=
/span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> Dic=
tionary&lt;</span><span style=3D"font-size:9.5pt;font-family:Consolas;color=
:blue">string</span><span style=3D"font-size:9.5pt;font-family:Consolas;col=
or:black">,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">&=
gt;();<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">publ=
ic</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">void=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> De=
scription(</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:=
blue">string</span><span style=3D"font-size:9.5pt;font-family:Consolas;colo=
r:black">
 str)<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; {<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; }<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">publ=
ic</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">over=
ride</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"=
>
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">bool=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> Tr=
yInvokeMember(InvokeMemberBinder binder,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">[=
] args,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">out<=
/span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> =
result)<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; {<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">retu=
rn</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">base=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">.Tr=
yInvokeMember(binder, args,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">out<=
/span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> res=
ult);<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; }<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
If you try to get a value of a property</span><span style=3D"font-size:9.5p=
t;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
not defined in the class, this method is called.</span><span style=3D"font-=
size:9.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">publ=
ic</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">over=
ride</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"=
>
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">bool=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> Tr=
yGetMember(GetMemberBinder binder,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">out<=
/span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> =
result)<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; {<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
Converting the property name to lowercase</span><span style=3D"font-size:9.=
5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
so that property names become case-insensitive.</span><span style=3D"font-s=
ize:9.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">stri=
ng</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> =
name =3D binder.Name.ToLower();<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
If the property name is found in a dictionary,</span><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
set the result parameter to the property value and return true.</span><span=
 style=3D"font-size:9.5pt;font-family:Consolas;color:black"><o:p></o:p></sp=
an></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
Otherwise, return false.</span><span style=3D"font-size:9.5pt;font-family:C=
onsolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">retu=
rn</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">dic=
tionary.TryGetValue(name, out result);</span><span style=3D"font-size:9.5pt=
;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; }<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
If you try to set a value of a property that is</span><span style=3D"font-s=
ize:9.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
not defined in the class, this method is called.</span><span style=3D"font-=
size:9.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">publ=
ic</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">over=
ride</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"=
>
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">bool=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> Tr=
ySetMember(SetMemberBinder binder,
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">obje=
ct</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black"> =
value)<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; {<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
Converting the property name to lowercase</span><span style=3D"font-size:9.=
5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
so that property names become case-insensitive.</span><span style=3D"font-s=
ize:9.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dictionary[binder.Name.ToLower()] =3D va=
lue;<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
You can always add a value to a dictionary,</span><span style=3D"font-size:=
9.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:green">// =
so this method always returns true.</span><span style=3D"font-size:9.5pt;fo=
nt-family:Consolas;color:black"><o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">retu=
rn</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:blue">true=
</span><span style=3D"font-size:9.5pt;font-family:Consolas;color:black">;<o=
:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; }<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:9.5pt;font-family:Consolas;=
color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:9.5pt;font-family:Consolas;=
color:black">&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:9.5pt;font-family:Consolas;=
color:black">}<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:9.5pt;font-family:Consolas;=
color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:9.5pt;font-family:Consolas;=
color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:9.5pt;font-family:Consolas;=
color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
<o:p>&nbsp;</o:p></span></p>
</div>
</body>
</html>

--_000_BY5PR13MB3778E132E27EAB387AFB8E33F63C9BY5PR13MB3778namp_--

--===============0136734142750045878==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
PythonNet mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/pythonnet.python.org/
Member address: [email protected]

--===============0136734142750045878==--