[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’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> </o:p></p>
<p class=3D"MsoNormal">I am trying to bind a c# class (which is derived Dyn=
amicObject) to Pythonnet but can’t get the dynamic aspect worki=
ng.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">In the following Code, the line : <span style=3D"fon=
t-family:"Courier New"">
AppBind.Description("layout")<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> </o:p></p>
<p class=3D"MsoNormal">But <span style=3D"font-family:"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’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> </o:p></p>
<p class=3D"MsoNormal">And <span style=3D"font-family:"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> </o:p></p>
<p class=3D"MsoNormal"><o:p> </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’ve found is this page, but I cou=
ldn’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> </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> </o:p></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">Here is the python snippet:<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
AppBind =3D PythonSpace.PythonCallbacks()<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
def DoStuff():<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
<o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
AppBind.Description("layout")<o:p></o:p></span=
></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
AppBind.DynMethod(123)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
AppBind.Fred =3D 123<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
<o:p> </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> </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"> &n=
bsp; Dictionary<</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<</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> </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"> &n=
bsp;
</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"> &n=
bsp; {<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-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"> &n=
bsp; }<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-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"> &n=
bsp;
</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"> &n=
bsp; {<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"> &n=
bsp;
</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"> &n=
bsp; }<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-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp; {<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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp;
</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> </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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp; }<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-autospace:none"><span style=3D"font-si=
ze:9.5pt;font-family:Consolas;color:black"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp; {<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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp; 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> </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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp;
</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"> &n=
bsp; }<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></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> </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> </o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:"Courier New"">=
<o:p> </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==--