diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 640bf007..58ed22ab 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -1116,13 +1116,17 @@ namespace CppSharp.Generators.CSharp #region Virtual Tables - public void GenerateVTable(Class @class) + public List GetVTableMethodEntries(Class @class) { var entries = VTables.GatherVTableMethodEntries(@class); - entries = entries.Where(e => !e.Method.Ignore || + return entries.Where(e => !e.Method.Ignore || @class.Properties.Any(p => !p.Ignore && (p.GetMethod == e.Method || p.SetMethod == e.Method))).ToList(); + } + public void GenerateVTable(Class @class) + { + var entries = GetVTableMethodEntries(@class); if (entries.Count == 0) return; @@ -1241,6 +1245,13 @@ namespace CppSharp.Generators.CSharp NewLine(); } + private void GenerateVTableClassSetupCall(Class @class) + { + var entries = GetVTableMethodEntries(@class); + if (Options.GenerateVirtualTables && @class.IsDynamic && entries.Count != 0) + WriteLine("SetupVTables({0});", Generator.GeneratedIdentifier("Instance")); + } + private void GenerateVTableManagedCall(Method method) { if (method.IsDestructor) @@ -1605,8 +1616,7 @@ namespace CppSharp.Generators.CSharp if (ShouldGenerateClassNativeField(@class)) { WriteLine("{0} = native;", Helpers.InstanceIdentifier); - if (Options.GenerateVirtualTables && @class.IsDynamic) - WriteLine("SetupVTables({0});", Generator.GeneratedIdentifier("Instance")); + GenerateVTableClassSetupCall(@class); } } else @@ -1857,8 +1867,7 @@ namespace CppSharp.Generators.CSharp WriteLine(");"); } - if (Options.GenerateVirtualTables && @class.IsDynamic) - WriteLine("SetupVTables({0});", Generator.GeneratedIdentifier("Instance")); + GenerateVTableClassSetupCall(@class); } public void GenerateInternalFunctionCall(Function function,