标签: static-methods

从静态方法调用后代虚方法

首先让我们建立这个.

我有

public abstract class Foo
{
  public static void StaticMethod()
  {
  }
}
public class Bar : Foo
{
}
Run Code Online (Sandbox Code Playgroud)

打电话有效吗?

Bar.StaticMethod();
Run Code Online (Sandbox Code Playgroud)

???

如果是这样,让我们​​展开前面的例子:

public abstract class Foo
{
  public static void StaticMethod()
  {
  }
  public abstract void VirtualMethod();
}
public class Bar : Foo
{
  public override void VirtualMethod()
  {
     Trace.WriteLine("virtual from static!!!!");
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该如何在基类中构造StaticMethod,以便从派生类中使用VirtualMethod?我今天的咖啡因似乎太少/太多了,这里没有任何想法.

嗯,我知道我不能从静态方法调用实例方法.所以问题就出现了:

我可以从基类的静态方法创建派生类的实例.使用类似的东西:

  public static void StaticMethod()
  {
    derived d=new derived();
    d.VirtualMethod();
  }
Run Code Online (Sandbox Code Playgroud)

为了说明的目的,我发明了新的关键字.

顺便说一句,我会赞成基于非反思的解决方案!

c# inheritance static-methods virtual-functions

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

魔术方法上的@StaticMethod或@ClassMethod装饰

我试图将魔术方法装饰__getitem__成课堂上的类方法.这是我尝试的样本.我不介意使用classmethod或staticmethod装饰,但我不太清楚如何做到这一点.这是我尝试过的:

import ConfigParser

class Settings(object):
   _env = None
   _config = None

   def __init__(self, env='dev'):
    _env = env
    # find the file
    filePath = "C:\\temp\\app.config"

    #load the file
    _config = ConfigParser.ConfigParser()
    _config.read(filePath)

   @classmethod
   def __getitem__(cls, key): 
    return cls._config.get(cls._env, key)

   @classmethod
   def loadEnv(cls, env): 
    cls._env = env
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试调用时,Settings['database']我收到以下错误.

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected Array[Type], got str
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我做错了什么.此外,有人可以建议是否有更好的方法来做到这一点?我甚至尝试过使用MetaClasses,但收效甚微(因为我不太了解python).

 class Meta(type):
  def __getitem__(*args):
   return type.__getitem__(*args)

 class Settings(object):
  __metaclass__ = Meta
Run Code Online (Sandbox Code Playgroud)

提前致谢.

python static-methods decorator magic-methods

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

C++/CLI - 从某些名称空间引用静态方法的语法

我想在某些命名空间中从某个类执行静态方法,但是我将它用作方法参数时遇到问题.

例:

让我们说有一个类:

namespace ExampleNamespace {
        public ref class A
        {
        public:
            static int MethodA();
        };
}
Run Code Online (Sandbox Code Playgroud)

我想在其他命名空间中使用MethodA作为另一个方法参数:

方法b(方法a());

我能让它发挥作用的唯一方法就是这样写:

ExampleNamespace::A^ a;
MethodB(a->MethodA());
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有'a'声明的情况下编写它?就像是

MethodB(ExampleNamespace::A->MethodA()) 
Run Code Online (Sandbox Code Playgroud)

不会工作......

先感谢您.

static static-methods namespaces c++-cli

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

Objective C - 在Class类型对象上调用静态方法?

我收到以下错误: 类不是客观的c类名

- (void)CallStaticMethodForClass :(Class *)myClass
{
     [myClass doSomething];
}

+ (void)doSomething
{
     //
}
Run Code Online (Sandbox Code Playgroud)

static-methods class objective-c

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

静态函数问题,g ++表示该类尚未声明

我正在尝试编译此代码,并且g ++一直告诉我"TimeFinder"尚未声明

头文件

#ifndef _TIMEFINDER_H
#define _TIMEFINDER_H
#include <vector>
#include "timefinder.cpp"
using namespace std;
class TimeFinder
{
public:
    static vector<int> time_from_name(string filename);
    static int calc_seconds (vector <int> time);

};
#endif
Run Code Online (Sandbox Code Playgroud)

CPP文件

#include "timefinder.h"
using namespace std;
vector<int> TimeFinder::time_from_name(string filename)//Line 14
{
    //Method Body
}

int TimeFinder::calc_seconds (vector <int> time1)//Line 37
{

    //Method Body
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我在网上查看了其他示例,我的代码似乎与其他人的代码相匹配......

编辑:确切的错误消息是

timefinder.cpp:14:错误:'TimeFinder'尚未声明

timefinder.cpp:37:错误:'TimeFinder'尚未声明

编辑2:对不起,我对此并不擅长,但我要感谢大家的建议.希望我的代码质量会因为它们而开始提高.

c++ static-methods g++

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

获取/设置静态属性的函数

我一直在学习AS3中的封装,并使用get/set函数来创建(或看起来)只读的变量.我可以使用实例变量,但不能使用静态变量.我发现了这一点,这似乎表明可以在静态属性上使用get/set函数,但编译器一直告诉我我有重复的函数声明.这基本上就是我正在使用的:

package {
    public class Foo {
        protected static var bar:int = 0;

        public static function get bar():int {return bar;}
    }
}
Run Code Online (Sandbox Code Playgroud)

static-methods actionscript-3

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

静态方法中的泛型

我需要在实用程序类中添加一个方法,其中包含一些静态方法,这些方法从JSON字符串中解析事物并返回一组数据.

问题是这些东西有各种各样的子类型,所以我创建了这个方法:

public static <E extends Thing> E[] parseThingsFromJSON(String body) {
    return parser.fromJson(body, E[].class);
}
Run Code Online (Sandbox Code Playgroud)

调用者如何告诉这个方法是什么E?或者有更好的方法吗?

java generics static-methods

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

静态方法有点代码味吗?

我最近在与JUnit和Mockito合作开发TDD.出于某种方法,我正在使用Util类(在项目上下文中具有方法的实用程序类).我面临的问题是如何在Mockito中模拟这些类.我无法在Mockito中找到关于静态方法的实现.有人建议在Mockito上使用PowerMock,但不会取代我的JunitMockitoRunner吗?

我使用静态函数的方式是:

public void doSomething(int x){

    //Some code

    Y y = Util.someStaticMethod(x);

   //Some more code
}
Run Code Online (Sandbox Code Playgroud)

编辑:我也读到某处使用静态方法是代码气味,是一个糟糕的设计的标志.那么我应该如何重构设计以及我将获得哪些优势呢?

java junit static-methods mockito

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

静态方法中变量的竞争条件

我有一个方法如下:

public static void method() {

int i = 0;
i = i + 1;

}
Run Code Online (Sandbox Code Playgroud)

我在静态方法中有一个int变量.并且该方法由几个线程访问.
我的问题是:

  1. i变量是否符合竞争条件?
  2. 如果在Spring Web应用程序中访问该方法并由多个用户同时访问该怎么办?

java static multithreading static-methods race-condition

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

python静态方法比实例方法消耗更少的内存

我有几个self在其中使用的实例方法,但只在几个地方使用.

所以我可以直接从我使用参数调用这些方法的位置传递这些值,并将方法创建为staticmethod.这会消耗更少的内存吗?

python memory static-methods memory-management python-3.x

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