File tree Expand file tree Collapse file tree 6 files changed +44
-2
lines changed
Expand file tree Collapse file tree 6 files changed +44
-2
lines changed Original file line number Diff line number Diff line change 4242- Sam Winstanley ([ @swinstanley ] ( https://github.com/swinstanley ) )
4343- Sean Freitag ([ @cowboygneox ] ( https://github.com/cowboygneox ) )
4444- Serge Weinstock ([ @sweinst ] ( https://github.com/sweinst ) )
45+ - Simon Mourier ([ @smourier ] ( https://github.com/smourier ) )
4546- Viktoria Kovescses ([ @vkovec ] ( https://github.com/vkovec ) )
4647- Ville M. Vainio ([ @vivainio ] ( https://github.com/vivainio ) )
4748- Virgil Dupras ([ @hsoft ] ( https://github.com/hsoft ) )
Original file line number Diff line number Diff line change @@ -43,6 +43,7 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
4343- Fixed errors breaking .NET Remoting on method invoke ([ #276 ] [ i276 ] )
4444- Fixed PyObject.GetHashCode ([ #676 ] [ i676 ] )
4545- Fix memory leaks due to spurious handle incrementation ([ #691 ] [ i691 ] )
46+ - Fix inheritance of non-abstract base methods ([ #755 ] [ i755 ] )
4647
4748
4849## [ 2.3.0] [ ] - 2017-03-11
@@ -694,3 +695,4 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
694695[ i131 ] : https://github.com/pythonnet/pythonnet/issues/131
695696[ p534 ] : https://github.com/pythonnet/pythonnet/pull/534
696697[ p531 ] : https://github.com/pythonnet/pythonnet/pull/531
698+ [ 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
601601 {
602602 int IComparer . Compare ( object m1 , object m2 )
603603 {
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+
604617 int p1 = MethodBinder . GetPrecedence ( ( MethodBase ) m1 ) ;
605618 int p2 = MethodBinder . GetPrecedence ( ( MethodBase ) m2 ) ;
606619 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" ?>
22<Project DefaultTargets =" Build" xmlns =" http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion =" 4.0" >
33 <PropertyGroup >
44 <Configuration Condition =" '$(Configuration)' == '' " >Debug</Configuration >
8383 <Compile Include =" generictest.cs" />
8484 <Compile Include =" globaltest.cs" />
8585 <Compile Include =" indexertest.cs" />
86+ <Compile Include =" InheritanceTest.cs" />
8687 <Compile Include =" interfacetest.cs" />
8788 <Compile Include =" methodtest.cs" />
8889 <Compile Include =" moduletest.cs" />
110111 <Copy SourceFiles =" $(TargetAssembly)" DestinationFolder =" $(SolutionDir)\src\tests\fixtures" />
111112 <!-- Copy SourceFiles="$(TargetAssemblyPdb)" Condition="Exists('$(TargetAssemblyPdb)')" DestinationFolder="$(PythonBuildDir)" /-->
112113 </Target >
113- </Project >
114+ </Project >
Original file line number Diff line number Diff line change @@ -281,3 +281,14 @@ def PyCallback(self, self2):
281281 testobj .DoCallback ()
282282 assert testobj .PyCallbackWasCalled
283283 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