在c#中转换抽象类中带有静态字段的java接口是最佳选择吗? 公共接口存储{ 公共静态最终浮动初始荷载系数=0.7f; 公共静态最终int初始容量=149; }
我有上面的代码需要翻译成c。唯一合适的解决方案似乎是将其设置为抽象类。从我发现的情况来看,使用readonly比const更安全:在c#中转换抽象类中带有静态字段的java接口是最佳选择吗? 公共接口存储{ 公共静态最终浮动初始荷载系数=0.7f; 公共静态最终int初始容量=149; },java,c#,interface,field,abstract-class,Java,C#,Interface,Field,Abstract Class,我有上面的代码需要翻译成c。唯一合适的解决方案似乎是将其设置为抽象类。从我发现的情况来看,使用readonly比const更安全: public interface IHashStorage<T> { public static final float INITIAL_LOAD_FACTOR = 0.7f; public static final int INITIAL_CAPACITY = 149; } 公共抽象类IHashStorage { 私有只读浮点初始负载
public interface IHashStorage<T> {
public static final float INITIAL_LOAD_FACTOR = 0.7f;
public static final int INITIAL_CAPACITY = 149;
}
公共抽象类IHashStorage
{
私有只读浮点初始负载因数=(浮点)0.7;
私有只读int初始容量=149;
}
Java中的项目使用Decorator模式和代理,从Java到c#的转换可能需要使用更多的抽象类(目前Java中只使用接口)?理论上我知道它们之间的区别,但实际上在c语言中我更多地使用抽象类。我对java不太熟悉,我想知道你关于如何找到完成这项任务的最佳解决方案的建议,我指的是转换代码时要记住的要点。正如我在评论中所暗示的,无法将字段(或任何其他实现细节)附加到C#中的接口。除了使其成为抽象类之外,您还有两种选择:
我将使用get属性定义一个接口。
然后,让我的基类实现它并设置默认值
然后,为实现java接口的每个java类扩展基类。
大致如下:
public abstract class IHashStorage<T>
{
private readonly float INITIAL_LOAD_FACTOR = (float)0.7;
private readonly int INITIAL_CAPACITY = 149;
}
公共接口存储
{
浮点InitialLoadFactor{get;}
int InitialCapacity{get;}
}
公共类HashStorageBase:IHashStorage
{
私有只读浮点_initialLoadFactor=0.7f;
私有只读int_initialCapacity=149;
公共浮动初始负载因子
{
获取{return\u initialLoadFactor;}
}
公共交通容量
{
获取{return\u initialCapacity;}
}
}
公共类HashStorage1:HashStorageBase
{
...
}
顺便说一句,将您提到的字段附加到接口似乎是错误的(这就是为什么C#中不允许这样做的原因)。接口不应定义实现,负载系数和初始容量是实现细节。这些应该留给接口的特定实现,而不是接口本身。注意,在分配时不需要强制转换为float。您仍然可以使用0.7f;
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>
{
...
}