相关疑难解决方法(0)

为什么我不能在C#中使用抽象静态方法?

我最近一直与提供商合作,我遇到了一个有趣的情况,我希望有一个抽象的静态方法.我读了一些关于这个主题的帖子,这有点意义,但有一个很清楚的解释吗?

.net c# language-design

175
推荐指数
8
解决办法
10万
查看次数

为什么接口不能指定静态方法?

我知道这个问题一直被问到,但我似乎无法找到足够好的答案.所以为了弄清楚我想知道的是什么,我将把它分成两个问题:

  1. 为什么接口不能有静态方法签名?我将尝试抢占非答案,询问为什么在世界上我想用以下内容执行此操作:我希望能够静态调用GetDbConnectionType()on SqliteCodeGeneratorMssqlCodeGenerator:

    interface ICodeGenerator
    {
        // this is the method I would like to be static:
        string GetDbConnectionType();
    }
    
    abstract class CodeGeneratorBase : ICodeGenerator
    {
        public abstract string GetDbConnectionType();
    
        public void GenerateSomeCode(StringBuilder s)
        {
            s.AppendLine("var foo = new " + GetDbConnectionType() + "();");
        }
    }
    
    class SqliteCodeGenerator : CodeGeneratorBase
    {
        public override string GetDbConnectionType()
        {
            return "SQLiteConnection";
        }
    }
    
    class MssqlCodeGenerator : CodeGeneratorBase
    {
        public override string GetDbConnectionType()
        {
            return "SqlConnection";
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 另一方面,这是第二个问题的问题,如果你知道一个很好的替代方案来实现上述目标,那么无论如何......

c# static interface

42
推荐指数
2
解决办法
4万
查看次数

C#虚拟静态方法

为什么静态虚拟不可能?C#依赖还是在OO世界中没有任何意义?

我知道这个概念已被强调,但我没有找到上一个问题的简单答案.

c# generics methods virtual static

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

你什么时候需要使用后期静态绑定?

在阅读了后期静态绑定(LSB)的描述后,我非常清楚地看到了发生了什么.现在,哪种情况最有用或最需要?

php oop

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

如何实现虚拟静态属性?

据我所知C#,不支持虚拟静态属性.如何实现这样的行为C#

我想归档基类的所有派生类必须覆盖静态属性.获取派生类型,我想访问一个名为的静态属性Identifier

Type t = typeof(DerivedClass);
var identifier= (String) t.GetProperty("Identifier", BindingFlags.Static).GetValue(null, null);
Run Code Online (Sandbox Code Playgroud)

c# virtual static properties

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

C#:基类可以在静态函数中使用派生类的变量吗?

有没有让基类在C#中使用派生类的静态变量?像这样的东西:

class Program
{
    static void Main(string[] args)
    {
        int Result = DerivedClass.DoubleNumber();
        Console.WriteLine(Result.ToString());   // Returns 0
    }
}

class BaseClass
{
    public static int MyNumber;

    public static int DoubleNumber()
    {
        return (MyNumber*2);
    }
}

class DerivedClass : BaseClass
{
    public new static int MyNumber = 5;
}
Run Code Online (Sandbox Code Playgroud)

我试图让它返回10,但我得到0.

这里是我使用它的地方:我有一个名为ProfilePictures的类,它带有一个名为GetTempSavePath的静态函数,它将用户id作为参数,并返回临时文件的物理路径.路径库是一个名为TempPath的静态变量.由于我在多个项目中使用此类并且它们具有不同的TempPath,因此我创建了一个派生类,该变量将该变量设置为项目的路径.

也可以看看

为什么我不能声明C#方法虚拟和静态?

c#

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

在所有实现类型中共享的静态方法

在c#中,如何定义一个由所有派生/实现类型实现的静态方法?我知道你无法在界面中定义静态方法.

基本前提是这样的:

比方说,我有一个生物基类.衍生类型将是人类和狗.

我想要一种方法,可以回答我说给定生物体的腿数.所以人类将是2,狗将是4,等等.

我可以将这样的方法作为实例方法,但它没有多大意义,因为它对于所有Dog类型都是相同的方法,对所有Human类型都是相同的,等等.

c# interface

0
推荐指数
1
解决办法
118
查看次数

标签 统计

c# ×6

static ×3

interface ×2

virtual ×2

.net ×1

generics ×1

language-design ×1

methods ×1

oop ×1

php ×1

properties ×1