diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 3bc295c7..3ffdb32c 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -1486,8 +1486,7 @@ namespace CppSharp.Generators.CSharp switch (GetValidMethodAccess(method, @class)) { case AccessSpecifier.Public: - Write(Driver.Options.GenerateAbstractImpls && @class.IsAbstract - && method.IsConstructor ? "protected " : "public "); + Write("public "); break; case AccessSpecifier.Protected: Write("protected "); @@ -1583,8 +1582,7 @@ namespace CppSharp.Generators.CSharp switch (method.Access) { case AccessSpecifier.Public: - return @class.IsAbstract && method.IsConstructor ? - AccessSpecifier.Protected : AccessSpecifier.Public; + return AccessSpecifier.Public; default: return method.IsOverride ? @class.GetRootBaseMethod(method).Access : method.Access; diff --git a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs index 3a614eff..6f17906a 100644 --- a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs +++ b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs @@ -34,7 +34,13 @@ namespace CppSharp.Passes return false; if (@class.IsAbstract) + { + foreach (var ctor in from ctor in @class.Constructors + where ctor.Access == AccessSpecifier.Public + select ctor) + ctor.Access = AccessSpecifier.Protected; internalImpls.Add(AddInternalImplementation(@class)); + } return base.VisitClassDecl(@class); }