在 c# 中将 java 接口与抽象 class 中的静态字段转换为最佳选择吗?

Is it the best option to convert a java interface with static fields in a abstract class in c#?

public interface IHashStorage<T> {
    public static final float INITIAL_LOAD_FACTOR = 0.7f;
    public static final int INITIAL_CAPACITY = 149;
}

我有上面的代码需要用 c# 翻译。唯一合适的解决方案是将其设为抽象 class.From 我发现使用 readonly 比使用 const:

更安全
public abstract class IHashStorage<T>
    {
        private readonly float INITIAL_LOAD_FACTOR = (float)0.7;

        private readonly int INITIAL_CAPACITY = 149;
    }

Java中的项目正在使用Decorator模式和Proxy,从java到c#的转换可能需要使用更抽象的类(目前在java 只使用接口)?理论上我知道它们之间的区别,但实际上在 c# 中我使用抽象 类 more.I 对 java 不太熟悉,我想知道你的关于如何找到完成此任务的最佳解决方案的建议,我的意思是转换代码时要记住的要点。

正如我在评论中暗示的那样,无法将字段(或任何其他实现细节)附加到 C# 中的接口。除了将其设为摘要之外,您还有两个选择 class:

  1. 将字段设置为接口上的(可能是只读的)属性,这将强制所有实现指定它们。
  2. 使字段成为接口上定义的自定义属性and/or实现。

我会用 get 属性 定义一个接口。
然后,让我的基础 class 实现它并设置默认值
然后,为实现 java 接口的每个 java class 扩展基础 class。
大致如下:

public interface IHashStorage<T>
{
    float InitialLoadFactor { get; }
    int InitialCapacity { get; }
}

public class HashStorageBase<T> : IHashStorage<T>
{
    private readonly float _initialLoadFactor = 0.7f;
    private readonly int _initialCapacity = 149;
    public float InitialLoadFactor
    {
        get { return _initialLoadFactor; }
    }

    public int InitialCapacity
    {
        get { return _initialCapacity; }
    }
}

public class HashStorage1<T> : HashStorageBase<T>
{
    ...
}