File tree 6 files changed +44
-2
lines changed
6 files changed +44
-2
lines changed Original file line number Diff line number Diff line change 42
42
- Sam Winstanley ([ @swinstanley ] ( https://github.com/swinstanley ) )
43
43
- Sean Freitag ([ @cowboygneox ] ( https://github.com/cowboygneox ) )
44
44
- Serge Weinstock ([ @sweinst ] ( https://github.com/sweinst ) )
45
+ - Simon Mourier ([ @smourier ] ( https://github.com/smourier ) )
45
46
- Viktoria Kovescses ([ @vkovec ] ( https://github.com/vkovec ) )
46
47
- Ville M. Vainio ([ @vivainio ] ( https://github.com/vivainio ) )
47
48
- Virgil Dupras ([ @hsoft ] ( https://github.com/hsoft ) )
Original file line number Diff line number Diff line change @@ -41,6 +41,7 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
41
41
- Fixed errors breaking .NET Remoting on method invoke ([ #276 ] [ i276 ] )
42
42
- Fixed PyObject.GetHashCode ([ #676 ] [ i676 ] )
43
43
- Fix memory leaks due to spurious handle incrementation ([ #691 ] [ i691 ] )
44
+ - Fix inheritance of non-abstract base methods ([ #755 ] [ i755 ] )
44
45
45
46
46
47
## [ 2.3.0] [ ] - 2017-03-11
@@ -691,3 +692,4 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
691
692
[ p625 ] : https://github.com/pythonnet/pythonnet/pull/625
692
693
[ i131 ] : https://github.com/pythonnet/pythonnet/issues/131
693
694
[ p531 ] : https://github.com/pythonnet/pythonnet/pull/531
695
+ [ i755 ] : https://github.com/pythonnet/pythonnet/pull/755
Original file line number Diff line number Diff line change @@ -601,6 +601,19 @@ internal class MethodSorter : IComparer
601
601
{
602
602
int IComparer . Compare ( object m1 , object m2 )
603
603
{
604
+ var me1 = ( MethodBase ) m1 ;
605
+ var me2 = ( MethodBase ) m2 ;
606
+ if ( me1 . DeclaringType != me2 . DeclaringType )
607
+ {
608
+ // m2's type derives from m1's type, favor m2
609
+ if ( me1 . DeclaringType . IsAssignableFrom ( me2 . DeclaringType ) )
610
+ return 1 ;
611
+
612
+ // m1's type derives from m2's type, favor m1
613
+ if ( me2 . DeclaringType . IsAssignableFrom ( me1 . DeclaringType ) )
614
+ return - 1 ;
615
+ }
616
+
604
617
int p1 = MethodBinder . GetPrecedence ( ( MethodBase ) m1 ) ;
605
618
int p2 = MethodBinder . GetPrecedence ( ( MethodBase ) m2 ) ;
606
619
if ( p1 < p2 )
Original file line number Diff line number Diff line change
1
+ using System ;
2
+
3
+ namespace Python . Test
4
+ {
5
+ public class BaseClass
6
+ {
7
+ public bool IsBase ( ) => true ;
8
+ }
9
+
10
+ public class DerivedClass : BaseClass
11
+ {
12
+ public new bool IsBase ( ) => false ;
13
+ }
14
+ }
Original file line number Diff line number Diff line change 1
- <?xml version =" 1.0" encoding =" utf-8" ?>
1
+ <?xml version =" 1.0" encoding =" utf-8" ?>
2
2
<Project DefaultTargets =" Build" xmlns =" http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion =" 4.0" >
3
3
<PropertyGroup >
4
4
<Configuration Condition =" '$(Configuration)' == '' " >Debug</Configuration >
83
83
<Compile Include =" generictest.cs" />
84
84
<Compile Include =" globaltest.cs" />
85
85
<Compile Include =" indexertest.cs" />
86
+ <Compile Include =" InheritanceTest.cs" />
86
87
<Compile Include =" interfacetest.cs" />
87
88
<Compile Include =" methodtest.cs" />
88
89
<Compile Include =" moduletest.cs" />
110
111
<Copy SourceFiles =" $(TargetAssembly)" DestinationFolder =" $(SolutionDir)\src\tests\fixtures" />
111
112
<!-- Copy SourceFiles="$(TargetAssemblyPdb)" Condition="Exists('$(TargetAssemblyPdb)')" DestinationFolder="$(PythonBuildDir)" /-->
112
113
</Target >
113
- </Project >
114
+ </Project >
Original file line number Diff line number Diff line change @@ -281,3 +281,14 @@ def PyCallback(self, self2):
281
281
testobj .DoCallback ()
282
282
assert testobj .PyCallbackWasCalled
283
283
assert testobj .SameReference
284
+
285
+
286
+ def test_method_inheritance ():
287
+ """Ensure that we call the overridden method instead of the one provided in
288
+ the base class."""
289
+
290
+ base = Test .BaseClass ()
291
+ derived = Test .DerivedClass ()
292
+
293
+ assert base .IsBase () == True
294
+ assert derived .IsBase () == False
You can’t perform that action at this time.
0 commit comments