[IronPython] C# Extension Methods and IP B2
Srivatsn Narayanan
srivatsn at microsoft.com
Wed Apr 9 00:23:19 CEST 2008
Currently, it doesn't "just work". You will have to decorate your POCOExt with an ExtensionType attribute so:
[assembly: ExtensionType(typeof(POCO), typeof(POCOExt))]
Then from somewhere (python/c#) make this call:
Microsoft.Scripting.Runtime.RuntimeHelpers.RegisterAssembly(typeof(POCOExt).Assembly);
This goes through the assembly and loads up everything in POCOExt into POCO.
-----Original Message-----
From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Ben Hall
Sent: Tuesday, April 08, 2008 2:53 PM
To: Discussion of IronPython
Subject: [IronPython] C# Extension Methods and IP B2
Hi everyone,
Tonight I was going to write a blog post on C# Interop so I I was
playing around a bit more with some of the new C# 3.0 features and I
looked at Extension methods and I can't seem to get it to work with IP
B2.
My C# code is this:
public static class POCOExt
{
public static void Print(this POCO poco)
{
Console.WriteLine(poco);
Console.WriteLine(poco.Created);
}
}
public class POCO
{
public DateTime Created { get; set; }
public POCO()
{
Created = DateTime.Now;
}
}
I drop that assembly into my DLLs folder, when using it in ipy it
doesn't seem to be detecting the extension methods. After doing a dir
on POCO, I expected to see the method Print.
>>> from DLRInterop import *
>>> p = POCO()
>>> dir (p)
['Created', 'Equals', 'Finalize', 'GetHashCode', 'GetType',
'MemberwiseClone', 'ReferenceEquals', 'ToString', '__class__',
'__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__str__', 'get_Created', 'set_Created']
>>> p.Print()
Traceback (most recent call last):
File , line unknown, in Initialize##48
AttributeError: 'POCO' object has no attribute 'Print'
This appeared to work, but it does go against C# 3.0 and isn't a great
approach....
>>> POCOExt.Print(p)
DLRInterop.POCO
08/04/2008 22:43:59
Is there anything special I need to do to get this to work as I would
expect, or is there something where to call the Extension Method you
need to go to the extension class?
Cheers
Ben
Blog.BenHall.me.uk
_______________________________________________
Users mailing list
Users at lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
More information about the Ironpython-users
mailing list