标签: static-members

为什么我不能在VS2008的类中使用静态成员,例如静态结构?

当我在VS 2008中编写这样的代码时:

.h
struct Patterns {
        string ptCreate;
        string ptDelete;
        string ptDrop;
        string ptUpdate;
        string ptInsert;
        string ptSelect;
    };     

class QueryValidate {
    string query;
    string pattern;
    static Patterns pts;
public:
    friend class Query;
    QueryValidate(const string& qr, const string& ptn):
      query(qr), pattern(ptn) {}
    bool validate() {
        boost::regex rg(pattern);
        return boost::regex_match(query, rg);
    }
    virtual ~QueryValidate() {}
};
Run Code Online (Sandbox Code Playgroud)

然后我像这样初始化我的结构:

.cpp
string QueryValidate::pts::ptCreate = "something";
string QueryValidate::pts::ptDelete = "something";
//...
Run Code Online (Sandbox Code Playgroud)

编译器给出以下错误:

'Patterns':'::'左边的符号必须是'ptSelect'类型:不是'QueryValidate'的成员

我究竟做错了什么?这是Visual Studio或我的代码的问题吗?我知道除了const之外的静态成员必须在声明它们的类之外定义.

c++ definition static-members visual-studio-2008

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

静态变量和方法

我遇到了一个像这样设置的类:

public class MyClass {

  private static boolean started = false;

  private MyClass(){
  }

  public static void doSomething(){
    if(started){
      return;
    }
    started = true;
    //code below that is only supposed to run
    //run if not started
  }
}
Run Code Online (Sandbox Code Playgroud)

我对静态方法的理解是你不应该在它们中使用类变量,除非它们是常量,并且不要改变.相反,你应该使用参数.我的问题是,为什么通过执行MyClass.doSomething()多次调用时不会破坏.在我看来,它应该不起作用,但确实如此.它只会传递一次if语句.

所以任何人都可以向我解释为什么这不会破坏?

java static-methods static-members

3
推荐指数
3
解决办法
2081
查看次数

从静态基类方法调用子类构造函数

好的......在Objective C中,您可以使用'new this()'从基类中的静态方法创建子类,因为在静态方法中,'this'指的是类,而不是实例.当我第一次发现它并且我经常使用它时,这是一个非常酷的发现.

但是,在C#中不起作用.该死的!

那么......任何人都知道如何在静态基类方法中"新建"一个子类?

像这样......

public class MyBaseClass{

    string name;

    public static Object GimmeOne(string name){

     // What would I replace 'this' with in C#?
        return new this(name); 

    }

    public MyBaseClass(string name){
        this.name = name;
    }

}

// No need to write redundant constructors
   public class SubClass1 : MyBaseClass{ }
   public class SubClass2 : MyBaseClass{ }
   public class SubClass3 : MyBaseClass{ }

SubClass1 foo = SubClass1.GimmeOne("I am Foo");
Run Code Online (Sandbox Code Playgroud)

是的,我知道我可以(并且通常会)直接使用构造函数,但我们特别需要在基类上调用共享成员,这就是我要问的原因.再一次,Objective C让我这样做.希望C#也这样做.

所以...任何接受者?

c# constructor subclass objective-c static-members

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

HashMap作为java中的静态成员

我希望将HashMap作为新类的每个实例的静态成员.然而,每当我尝试.get或输入我的HashMap时,我都会得到一个NullPointerException.救命!?

我正在做:public class EmailAccount { private static HashMap<String,Integer> name_list;然后name_list.put(last_name, occurences);Even name_list.containsKey(last_name);返回NullPointer.

这来自于之前的一个问题:计算Java中字符串的出现次数

java hashmap static-members

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

C++成员函数指针

考虑以下课程

class Foo
{
    typedef bool (*filter_function)(Tree* node, std::list<std::string>& arg);

    void filter(int filter, std::list<std::string>& args)
    {
        ...
        if (filter & FILTER_BY_EVENTS) {
            do_filter(events_filter, args, false, filter & FILTER_NEGATION);
        }
        ...
    }

    void do_filter(filter_function ff, std::list<std::string>& arg, 
        bool mark = false, bool negation = false, Tree* root = NULL)
    {
        ...
    }

    bool events_filter(Tree* node, std::list<std::string>& arg)
    {
        ...
    }
};
Run Code Online (Sandbox Code Playgroud)

我可以events_filter作为参数传递给do_filter唯一events_filterstatic成员.但我不想成功static.有没有办法可以将指向成员函数的指针传递给另一个函数?可能正在使用boost库(如函数)左右.

谢谢.

c++ static-members

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

在C#中初始化静态字段以在枚举模式中使用

我的问题实际上是关于如何解决C#初始化静态字段的方法.在尝试复制Java样式枚举时,我需要这样做.以下是显示问题的代码示例:

我继承的所有枚举的基类

public class EnumBase
{
    private int _val;
    private string _description;

    protected static Dictionary<int, EnumBase> ValueMap = new Dictionary<int, EnumBase>();

    public EnumBase(int v, string desc)
    {
        _description = desc;
        _val = v;
        ValueMap.Add(_val, this);
    }

    public static EnumBase ValueOf(int i)
    {
        return ValueMap[i];
    }

    public static IEnumerable<EnumBase> Values { get { return ValueMap.Values; } }

    public override string ToString()
    {
        return string.Format("MyEnum({0})", _val);
    }
}
Run Code Online (Sandbox Code Playgroud)

枚举集的示例:

public sealed class Colors : EnumBase
{
    public static readonly Colors Red    = …
Run Code Online (Sandbox Code Playgroud)

c# enumeration initialization static-members

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

在.NET应用程序中"重置"所有静态变量的最佳方法

除了可怕之外,如果我有一个.NET webapp,其中静态变量分散在多个类中,那么最好的方法是将它们全部"清除"为null.

在我的头顶,它将是使用重新启动应用程序

System.Web.HttpRuntime.UnloadAppDomain() 
Run Code Online (Sandbox Code Playgroud)

问题背后的原因 - 我们正在缓存一些非常大的字典集合,这些集合的创建成本很高,并且在奇怪的情况下需要重置.

c# asp.net static-members

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

通过对象访问类的静态成员

可能重复:
访问静态成员变量

我有一个符号inst,它是一个类的对象classy.我需要通过对象的符号访问此类的静态成员.我试过inst::staticmember但我的g ++说error: ‘inst’ is not a class or namespace.

我怎样才能做到这一点?

c++ class static-members

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

静态成员对象的初始化c#

我在初始化静态成员对象时遇到了一些问题.在我的项目中有3个类文件:

Feat,Class(RPG风格不是c#类),和Race.

他们每个人都有其可通过例如访问的一些静态成员对象Feat.General.MightyBlow,Race.DwarfClass.Base.Warrior同时MightyBlow.GetType()- > Feat,Dwarf.GetType()- > RaceWarrior.GetType()- > Class.一项壮举可以依赖于其他专长,课程和比赛,同样适用于课程和比赛.这三个类别中的每一个都不是由真正的类/专长/种族引用,而是通过名称字符串引用,该字符串可以在字典中查找,如:Class someClass = Class.Implemented[someClassesName].

一些最小的例子:

public static Feat ArmorHeavy = new Feat(
    "ArmorHeavy",
    Req.Feats(ArmorLight.GetName),
);

public static Feat ArmorLight = new Feat(
    "ArmorLight",
    Req.Feats(),
);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,首先需要的是ArmorHeavy需求ArmorLight,并且该需求仅通过ArmorLight名称(简称字符串"ArmorLight")来标识.

我没有编译器错误,但运行时我得到以下错误

NullReferenceException:对象引用未设置为对象的实例Feat + Proficiency..cctor()

我认为在ArmorHeavyC#的初始化过程中到达了这个点,在那里ArmorLight.GetName被调用,现在跳转到初始化ArmorLightArmorHeavyArmorLight初始化之后完成.情况并非如此,因为如果我交换这两个成员对象的位置或删除要求,则不会出现错误.

我怎么解决这个问题?请不要告诉我,我必须相应地订购所有专长.

c# static initialization static-members

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

Web请求中的静态变量

静态公共类中的静态公共变量如何在C#MVC3 Web项目中的Web请求之间表现.这些类型的变量是否在请求之间保留了值?

c# static-members asp.net-mvc-3

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