SVG icon indicating copy to clipboard operation
SVG copied to clipboard

Cannot inherit from SVGElement due to two internal abstract properties

Open sunyudai opened this issue 1 year ago • 6 comments

Description

I am trying to extend SvgElement with the intent to create some project specific types that will still render to proper svg. However, I am running into an issue where I cannot inherit from SvgElement directly because it has two members that are marked as both internal and abstract. These properties are ClassNames and AttributeName.

Used Versions / issue location

Found when referencing the 3.4.7 NuGet package for a .NET Framework 4.8 project, but I can see the issue in the master branch at SVG/Generators/AvailableElementsGenerator.cs on lines 248 and 250.

    internal abstract string AttributeName {{ get; }}

    internal abstract List<Type> ClassNames {{ get; }}

Edit: historical note - these properties have been marked internal abstract since 2021, the initial creation of the file.

Next Steps

I'm happy to quickly change that and create a Pull request if that is preferred, I'm opening the issue because I'm not quite clear on if there is a reason why these two properties might be marked as internal abstract.

If these should not be changed to, say, protected virtual, then what would be a more appropriate class to derive from?

sunyudai avatar Jul 17 '24 15:07 sunyudai

@wieslawsoltes - as you had added that code, can you please check if changing these methods to protected virtual would be a problem?

mrbean-bremen avatar Jul 17 '24 17:07 mrbean-bremen

Looks like lines 314 and 316 also need to be protected (overrides for these two), after that all tests pass.

sunyudai avatar Jul 17 '24 18:07 sunyudai

I'll wait some time for @wieslawsoltes to give his opinion, otherwise I see no reason for not making that change.

mrbean-bremen avatar Jul 17 '24 18:07 mrbean-bremen

@wieslawsoltes - as you had added that code, can you please check if changing these methods to protected virtual would be a problem?

I guess we could make all properties & methods generated in AvailableElementsGenerator make protected so anyone can create manually new svg element classes not relying on generator.

wieslawsoltes avatar Jul 18 '24 18:07 wieslawsoltes

Sounds good to me, I'll see if I can get that in tonight.

Thanks for the prompt answer!

sunyudai avatar Jul 18 '24 18:07 sunyudai

@sunyudai - are you still on it?

mrbean-bremen avatar Aug 19 '24 11:08 mrbean-bremen