© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•2y ago
Kiel

Concern over inheritance with static interface methods

Consider the following interface:
public interface ILuaModel
{
    static abstract void SetUserDataDescriptor(DefaultUserDataDescriptorProvider provider);
}

public interface ILuaModel<TModel> : ILuaModel
    where TModel : class
{
    new static void SetUserDataDescriptor(DefaultUserDataDescriptorProvider provider)
        => provider.SetDescriptor<TModel>(new InstanceTypeUserDataDescriptor(typeof(TModel), namingPolicy: CamelCaseUserDataNamingPolicy.Instance));
    static void ILuaModel.SetUserDataDescriptor(DefaultUserDataDescriptorProvider provider) => SetUserDataDescriptor(provider);
}
public interface ILuaModel
{
    static abstract void SetUserDataDescriptor(DefaultUserDataDescriptorProvider provider);
}

public interface ILuaModel<TModel> : ILuaModel
    where TModel : class
{
    new static void SetUserDataDescriptor(DefaultUserDataDescriptorProvider provider)
        => provider.SetDescriptor<TModel>(new InstanceTypeUserDataDescriptor(typeof(TModel), namingPolicy: CamelCaseUserDataNamingPolicy.Instance));
    static void ILuaModel.SetUserDataDescriptor(DefaultUserDataDescriptorProvider provider) => SetUserDataDescriptor(provider);
}


I have two classes, LuaUser and LuaMember. When I implement the classes like so, I get the following error:
class LuaUser : ILuaModel<LuaUser> { }

// Interface member 'ILuaModel.SetUserDataDescriptor' doesn't have a most specific implementation. Neither 'ILuaModel<LuaMember>.SetUserDataDescriptor', nor 'ILuaModel<LuaUser>.SetUserDataDescriptor' are most specific.
class LuaMember : LuaUser, ILuaModel<LuaMember> { }
class LuaUser : ILuaModel<LuaUser> { }

// Interface member 'ILuaModel.SetUserDataDescriptor' doesn't have a most specific implementation. Neither 'ILuaModel<LuaMember>.SetUserDataDescriptor', nor 'ILuaModel<LuaUser>.SetUserDataDescriptor' are most specific.
class LuaMember : LuaUser, ILuaModel<LuaMember> { }


If I add the suggested fix for this, which is creating an implementation of the non-generic
SetUserDataDescriptor
SetUserDataDescriptor
...Will this cause any issues? What should this method do exactly? Currently I am utilizing reflection to get all
ILuaModel
ILuaModel
implementations, to call
SetUserDataDescriptor
SetUserDataDescriptor
, and I just want to know what I should do here to make sure both
LuaUser
LuaUser
and
LuaMember
LuaMember
have their methods called appropriately.
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources

Similar Threads

Was this page helpful?
Recent Announcements

Similar Threads

❔ Static interface methods
C#CC# / help
3y ago
❔ Static methods
C#CC# / help
3y ago
Composition over Inheritance
C#CC# / help
2y ago
Static class or regular class with interface?
C#CC# / help
14mo ago