C# 具有私有字段的抽象基类

C# 具有私有字段的抽象基类,c#,C#,所以我有各种各样的类,每个类都有许多不同的属性,但我希望每个类都有一个通用的MapValue方法。我创建了一个抽象泛型基类,如下所示: public abstract class FileSectionBase<T> { internal static IDictionary<string, Func<T, string, T>> _mappings; internal virtual void MapValue(string va

所以我有各种各样的类,每个类都有许多不同的属性,但我希望每个类都有一个通用的MapValue方法。我创建了一个抽象泛型基类,如下所示:

public abstract class FileSectionBase<T>
{
    
    internal static IDictionary<string, Func<T, string, T>> _mappings;

    internal virtual void MapValue(string value, T model)
    {
        Func<T, string, T> function;

        if (_mappings.TryGetValue(value, out function))
        {
            function(model, value);
        }
    }
}
公共抽象类文件段库
{
内部静态IDictionary_映射;
内部虚空映射值(字符串值,T模型)
{
Func函数;
if(_mappings.TryGetValue(值,out函数))
{
功能(模型、价值);
}
}
}
但是,继承此基类的每个类都需要在_映射中定义映射字典,以使继承的函数正常工作。除了类型和从字典中传回的函数之外,每个类的函数都是相同的,所以有些东西告诉我应该能够做到这一点,但我不知道如何将_mappings字段强制到继承的类


我可以使用公共属性使它工作,但是除了类本身访问字典之外,我真的不需要其他任何东西。。。理想情况下,MapValue方法应该是继承类本身的私有方法

实际上,MapValue方法应该是继承类本身的私有方法-因此,
protected
then?或者可能将其作为构造函数参数传递给基类?
static
成员在
FileSectionBase
的每个专门化中只有一个实例,因此如果两个继承类都要扩展
FileSectionBase
,它们必须共享同一个
\u映射实例,这听起来似乎不符合您的目的。“理想情况下,实际上MapValue方法应该是继承类本身的私有方法”您不能通过继承共享一个实现,而期望该方法也是私有的。选择一个。除了@PatrickRoberts所说的,将
\u映射设置为静态是不安全的,您可能会遇到并发问题。所以我仍然不确定我是否理解,这听起来好像我不能做我想做的事情?我必须公开映射字段?或者将其作为属性而不是字段?