在 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:
- 将字段设置为接口上的(可能是只读的)属性,这将强制所有实现指定它们。
- 使字段成为接口上定义的自定义属性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>
{
...
}
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:
- 将字段设置为接口上的(可能是只读的)属性,这将强制所有实现指定它们。
- 使字段成为接口上定义的自定义属性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>
{
...
}