相关疑难解决方法(0)

为什么静态类不能实现接口?

可能重复:
为什么C#不允许静态方法实现接口?

在我的应用程序中,我想使用一个将执行原始数据访问的存储库(TestRepository,SqlRepository,FlatFileRepository等).因为这样的存储库将在我的应用程序的整个运行时间中使用,所以对我来说这是一个明智的事情,让它成为一个静态的类,所以我可以去

SqlRepository.GetTheThingById(5);
Run Code Online (Sandbox Code Playgroud)

没有它必须一直重生.因为我希望我的存储库可以互换,所以我想它们实现一个通用接口:IRepository.但是当我尝试这样做时,我明白了

"Static classes cannot implement interfaces"
Run Code Online (Sandbox Code Playgroud)

他们为什么不能?你怎么建议我改变我的设计呢?有没有我可以使用的模式?

更新
五年后:这个问题被访问了20k +次,我了解了存储库模式的缺点,了解了IoC,并意识到我的问题制定得很差.

我真的不是在问接口的C#规范是什么,而是为什么它故意以这种特定的方式限制我.

实际的答案是,在实例或类型上调用方法的语法是不同的.但这个问题已经结束了.

.net c#

96
推荐指数
3
解决办法
6万
查看次数

如何在接口上实现静态方法?

我有一个第三方C++ DLL,我从C#调用.

这些方法是静态的.

我想抽象它来做一些单元测试,所以我创建了一个带有静态方法的接口,但现在我的程序错误:

修饰符'static'对此项无效

MyMethod cannot be accessed with an instance reference; qualify it with a type name instead
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这种抽象?

我的代码看起来像这样

private IInterfaceWithStaticMethods MyInterface;

public MyClass(IInterfaceWithStaticMethods myInterface)
{
  this.MyInterface = myInterface;
}

public void MyMethod()
{
  MyInterface.StaticMethod();
}
Run Code Online (Sandbox Code Playgroud)

.net c# interface

76
推荐指数
9
解决办法
15万
查看次数

C#中的度量单位 - 差不多

受到F#中的度量单位的启发,尽管断言(这里)你无法用C#做到这一点,但我还有一个想法,那就是我一直在玩的.

namespace UnitsOfMeasure
{
    public interface IUnit { }
    public static class Length
    {
        public interface ILength : IUnit { }
        public class m : ILength { }
        public class mm : ILength { }
        public class ft : ILength { }
    }
    public class Mass
    {
        public interface IMass : IUnit { }
        public class kg : IMass { }
        public class g : IMass { }
        public class lb : IMass { }
    } …
Run Code Online (Sandbox Code Playgroud)

c# f# units-of-measurement

57
推荐指数
5
解决办法
3万
查看次数

C#接口不能包含运算符

任何人都可以解释为什么不允许C#接口包含运算符?

谢谢.

c# static-methods interface operators

34
推荐指数
1
解决办法
1万
查看次数

什么时候不在Java中使用static关键字?

什么时候在方法签名上使用Java中的static关键字被认为是不好的做法?如果方法基于某些参数执行函数,并且不需要访问非静态的字段,那么您是否总是希望这些类型的方法是静态的?

java static static-methods

29
推荐指数
3
解决办法
2万
查看次数

如何通过使用接口或抽象来确保类具有静态属性?

我有一个抽象类-let说myBase.我希望从myBase派生的所有类都有一个名为的静态字段

public static List<string> MyPArameterNames 
{
get {return _myParameterNames;} 
}
Run Code Online (Sandbox Code Playgroud)

因此,每个子类都可以告诉它使用哪些参数名称; 我想要静态,因为我不想为此创建一个实例.

我怎样才能做到这一点?

c# static abstract-class overriding interface

27
推荐指数
3
解决办法
2万
查看次数

静态方法无法实现接口方法,为什么?

interface IXXX
{
    void Foo();
}

class XXX : IXXX
{
    public static void Foo()
    {
        Console.WriteLine("From XXX");
    }
}


class Program 
{
    static void Main(string[] args)
    {
        XXX.Foo();

    }
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:XXX.Foo()无法实现接口成员,因为它是静态的.

为什么静态方法不能实现接口方法?

c#

9
推荐指数
2
解决办法
1万
查看次数

java接口中的静态方法

据我所知,你不能在接口体中声明静态方法.但是,我不小心在http://docs.oracle.com/网站上发现了一些特殊的代码.这是链接

Namelly

public interface TimeClient 
{
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
                           int hour, int minute, int second);
LocalDateTime getLocalDateTime();

static ZoneId getZoneId (String zoneString) {
    try {
        return ZoneId.of(zoneString);
    } catch (DateTimeException e) {
        System.err.println("Invalid time zone: " + zoneString +
            "; using default time zone instead.");
        return ZoneId.systemDefault();
    }
}

default ZonedDateTime getZonedDateTime(String zoneString) {
    return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString));
    }
} …
Run Code Online (Sandbox Code Playgroud)

java static-methods interface

7
推荐指数
4
解决办法
1万
查看次数

6
推荐指数
1
解决办法
1万
查看次数

在Visual Studio中使用预览功能和预览语言

如何在Visual Studio中打开C# 预览功能?

“可空引用类型”功能当前在“预览”中,“不支持”。要使用预览功能,请使用“预览”语言版本。

项目属性不提供“不支持的下一个C#版本的预览(预览)”作为选项: 无预览C可用预览

.net c# visual-studio c#-8.0

5
推荐指数
2
解决办法
3417
查看次数