|
After playing with this for a bit, I think that at the
moment IronPython is not capable of what you can do below in C#. The
insurmountable (for now, I hope) obsctacle that I hit is that the events must be
sealed classes, inherited from an abstract MulticastDelegate. IronPython doesn't
know of this rule and for now doesn't generate sealed class and the IronPython
code that attempts to mimic the output of C# compiler throws exception "delegate
must be a sealed class".
I think that as we improve the 'static compiler' story, we
may need to support creating sealed classes. For now, the scenario below is
broken...
Martin
From:
[EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
On Behalf Of Michael Shilman
Sent: Friday, November 11, 2005 12:59 PM To: Discussion of IronPython Subject: [IronPython] .NET Events in IronPython Is there any way to
declare .NET events in IronPython? Here is a simple
example in C# that “abstracts” a button pressed event into a “hello”
event:
public delegate void HelloInvoked();
public class HelloControl : Panel
{
public event HelloInvoked Hello;
public HelloControl()
{
Button b = new Button();
b.Text = "Hello";
b.Click += new EventHandler(b_Click);
b.Dock = DockStyle.Fill;
this.Controls.Add(b);
}
void b_Click(object sender, EventArgs e)
{
if (Hello != null) Hello();
}
} I can do something
equivalent with Python functions: class
HelloControl(Panel):
Hello = []
def __init__(self):
b = Button(Text="Hello",Dock=DockStyle.Fill)
b.Click += self.on_Click
self.Controls.Add(b)
def on_Click(self,sender,e):
for h in self.Hello: h() def
Foo(): print "hello" hc.Hello +=
[Foo] But for consistency
with my other C# code I’d like to use events if possible.
Any
thoughts? Many
thanks, Michael |
_______________________________________________ users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
