相关疑难解决方法(0)

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

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

.net c# language-design

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

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

我有一个辅助类,它只是一堆静态方法,并且想要辅助类的子类.某些行为是独特的,具体取决于子类,所以我想从基类调用虚方法,但由于所有方法都是静态的,我无法创建普通的虚方法(需要对象引用才能访问虚方法).

有没有办法解决?我想我可以使用单例.. HelperClass.Instance.HelperMethod()并不比HelperClass.HelperMethod()差.布朗尼指出任何可以指出支持虚拟静态方法的语言的人.

编辑:好的,我疯了.谷歌搜索结果让我觉得我不是那里的.

c# oop

50
推荐指数
7
解决办法
5万
查看次数

C#,像方法一样实现'静态抽象'

我最近遇到了一个问题,似乎我需要一个'静态抽象'方法.我知道为什么这是不可能的,但我怎样才能解决这个限制?

例如,我有一个抽象类,它有一个描述字符串.由于此字符串对于所有实例都是通用的,因此它被标记为static,但我想要求从此类派生的所有类都提供它们自己的Description属性,因此我将其标记为abstract:

abstract class AbstractBase
{
    ...
    public static abstract string Description{get;}
    ...
}
Run Code Online (Sandbox Code Playgroud)

它当然不会编译.我想过使用接口但接口可能不包含静态方法签名.

我应该简单地使它成为非静态的,并且总是得到一个实例来获取特定于类的信息吗?

有任何想法吗?

c# static abstract

41
推荐指数
4
解决办法
3万
查看次数

C#虚拟静态方法

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

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

c# generics methods virtual static

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

无法定义静态抽象字符串属性

我遇到了一个有趣的问题,我正在寻找一些关于如何最好地处理这个问题的建议......

我有一个抽象类,其中包含一个静态方法,该方法接受我想要定义为抽象属性的静态字符串.问题是C#不支持以下内容(请参阅ConfigurationSectionNameCurrent属性):

    public abstract class ProviderConfiguration : ConfigurationSection
    {
        private const string _defaultProviderPropertyName = "defaultProvider";
        private const string _providersPropertyName = "providers";

        protected static string ConfigurationSectionName { get; }

        public static Configuration Current
        {
            get { return Configuration)ConfigurationManager.GetSection(ConfigurationSectionName); }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想有一种方法可以解决这个问题,那就是使ConfigurationSectionName不是抽象的,然后在派生类中创建一个新的ConfigurationSectionName定义,但这感觉非常hackish.任何建议都是最受欢迎的.

Gratias!

.net c#

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

C#虚拟(或抽象)静态方法

静态继承就像实例继承一样工作.除非您不允许将静态方法设为虚拟或抽象.

class Program {
    static void Main(string[] args) {
        TestBase.TargetMethod();
        TestChild.TargetMethod();
        TestBase.Operation();
        TestChild.Operation();
    }
}

class TestBase {
    public static void TargetMethod() {
        Console.WriteLine("Base class");
    }

    public static void Operation() {
        TargetMethod();
    }
}

class TestChild : TestBase {
    public static new void TargetMethod() {
        Console.WriteLine("Child class");
    }
}
Run Code Online (Sandbox Code Playgroud)

这将输出:

Base class
Child class
Base class
Base class
Run Code Online (Sandbox Code Playgroud)

但我想要:

Base class
Child class
Base class
Child class
Run Code Online (Sandbox Code Playgroud)

如果我可以在静态方法上,我会使TargetMethod虚拟,它会完成这项工作.但有没有可以达到同样的效果?

编辑:是的,我可以在子类中放置一个Operation副本,但这需要复制并将大量代码粘贴到每个子节点,在我的例子中大约是35个类,这是一个维护噩梦.

c# inheritance

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

无法在抽象类型中定义静态方法.如何工作?

我目前正在为二进制应用程序协议开发库.以下代码示例无法编译(抽象类型中不允许使用静态方法定义.太糟糕了:(),但显示了我的意图:

public abstract class CmdBody<T>
{
    public static abstract byte[] ToBytes(T cmdBody);
    public abstract int GetLength();
}

public class CmdBodyA : CmdBody<CmdBodyA>
{
    static override byte[] ToBytes(CmdBodyA cmdBody) 
    { // Implementation }
}

public class CmdBodyB : CmdBody<CmdBodyB>
{
    static override byte[] ToBytes(CmdBodyB cmdBody)
    { // Implementation }
}

[...]

public class Cmd<T>
{ 
    public CmdHeader Header { get; set; }
    public CmdBody<T> Body { get; set; }

    public byte[] ToBytes()
    {
        byte[] cmdBytes = new byte[Header.GetLength() + Body.GetLength()];
        Header.ToBytes().CopyTo(cmdBytes, …
Run Code Online (Sandbox Code Playgroud)

c#

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

标签 统计

c# ×7

.net ×2

static ×2

abstract ×1

generics ×1

inheritance ×1

language-design ×1

methods ×1

oop ×1

virtual ×1