问题标签 [static-classes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
321 浏览

.net - 静态类和业务对象 COM 库

下面的代码来自一个 winforms 应用程序,它在按钮事件上打开业务对象 6.5 的实例,刷新报表,然后将报表中的数据转储到 csv 文件中,然后退出业务对象实例。

我第一次运行代码时它工作得很好,但是如果我再次运行它,我会遇到异常

抛出的异常是“无效对象”。

我假设这是因为 boApp 没有被重新初始化,问题是我缺乏关于静态类的知识。

调用方法是这样的:

这是 BO_Control 类

0 投票
3 回答
860 浏览

c# - 文本框未在 C# 中更新

专门查看 Customer 类中的到达方法。我正在使用 for 循环来创建客户类的实例,当我尝试将他们的到达时间写出到文本框(仅用于测试目的)时,文本框不会更新。为什么是这样?

这只是我的计算机课的一个小型模拟项目。它处于早期阶段,并且在很多地方可能是错误的!

0 投票
2 回答
217 浏览

c# - 可接受使用静态类?

有一个原本不应该是静态的类...

在构建课程时,我决定(1)除非我明确刷新它,否则我宁愿不重新填充数据集,并且(2)我是这些数据的看门人;没有其他人应该更新它们。此类从 WCF 服务中调用。

除了我想重用的数据集,没有状态;此类上的每个函数都可以设为静态。但是将类设为静态是否可以接受?与实例化它并在 WCF 上拥有一个成员级变量来保存它相反。我不确定我能看到这两种方法之间的区别。

为了减少争论,让我问:将类设为静态有什么缺点?我可能不想这样做的原因。

随意批评这种方法;通常我会在 ProcessApprovals 中创建数据集并在调用结束时将其处理掉,但我真的不需要经常刷新数据,如果有的话(我有一个单独的数据集,其中包含更多的临时数据,我将在每个我更新它的时间;SapGs3DataSet 数据真的不会改变)。

另一种方法是使用企业库来缓存数据集,它可以让我设置诸如过期和刷新数据的方法等内容。

我将根据最有力的论据来选择答案,为什么我不应该这样做。如果没有任何强烈的理由不这样做,我会以最好的理由选择答案,说明为什么可以这样做。

蒂亚!
詹姆士

0 投票
2 回答
1600 浏览

php - 带有静态类的适配器模式

我正在寻找一种在 PHP 5.x 中使用静态类实现适配器模式的好方法。

我想使用它的示例之一是与 Python 的os.path.join(). 我将有两个适应者,一个 Windows 和一个 Linux 适应者类。

我认为将这些类实现为静态类是合理的,因为它们没有“上下文”。他们不需要存储任何状态,并且每次我需要一个实例时都创建一个实例似乎是多余的——因此我正在寻找一种干净的方法来实现它。

让我们考虑以下虚假实现:

您会注意到的第一件事是,它假定了一个名为adaptee 的已初始化静态成员,该成员将保存必要的、依赖于操作系统的实现细节。

这要求我有一个任意命名的类似静态构造函数的函数,我会在类声明之后立即调用它。(用这种方法困扰我的另一件事)。

当然,我可以$adaptee在每个方法调用上初始化一个局部变量,但这似乎不合适,我必须在需要适配器的每个其他静态函数中复制它。

现在......对于 PHP 的类实现细节:它们不是一流的对象,所以我不能只将类作为参数传递。在示例中,它要求我将 Adaptees 创建为非静态(这个术语是什么?)类,然后实例化它并最终将其分配给$adapteeAdapter 类的静态成员变量。

或许这只是我的这种奇怪的、完全主观的想法……但我真的觉得这样不合适。您对更好的实施有任何想法吗?

我的另一个想法是,改为存储适配者的类名,然后使用call_user_func,但我觉得使用这种方法不太舒服。

更新

我可能没有正确描述这一点,所以我将尝试在更新中解释这一点:

我不是在寻找如何获得底层操作系统,但我想有一个简洁的方法,让静态类根据操作系统是 Linux、Windows、FreeBSD 还是其他东西而采取不同的行动。

我想到了适配器模式,但是由于我没有静态构造函数,因此我无法真正初始化该类。一种方法是在每个公共静态方法调用开始时对其进行初始化(或仅检查它是否已初始化)。

另一种可能性是,创建一个类似于静态构造函数的方法,并在声明后立即调用它。这可能会奏效,但我只是想知道还有哪些其他可能更优雅的方法来实现这一目标。

至于我最初的例子:它应该是一个实用函数,它实际上不需要保存任何类型的状态,所以我不是在寻找任何类型的路径对象。我想要的是一个路径工厂函数,它返回一个字符串,而不必在每次调用时区分不同的操作系统。“库”——让我创建了一个静态类作为我的相关实用程序函数的伪命名空间,以及适配器模式需要支持的不同实现细节。现在我正在寻找一种优雅的方式,将两者结合起来。

0 投票
3 回答
2598 浏览

c# - 如何序列化静态类的非静态子类

我想序列化一个非常普通的类,但问题是它嵌套在这样的静态类中:

这段代码:

产生此错误:

这个错误似乎完全无关紧要。StaticClass.SomeType不是静态类型。

有没有解决的办法?我认为这个错误是愚蠢的,我错了吗?

0 投票
2 回答
298 浏览

c# - 从数组中引用静态类?

我有一个数字列表,每个相同的数字应该完全相同。所以我对每个数字都有静态类,所以如果我改变类,它引用的所有数字也会改变。

访问数字的方式是通过包装函数,所以我不直接引用数组,例如:

那么,我该怎么做呢?

0 投票
1 回答
1162 浏览

c++ - std::map 无法插入对象

我正在制作的程序需要各种类型资源的访问池,但只有少数类可以访问。资源池也是它自己的类。因此,我决定为资源池使用一个静态类,并让其他人以这种方式访问​​它。

但是我在向池中添加资源时遇到了一个奇怪的问题。每个池都表示为一个 std::map,插入后,映射仍然为空。我猜这与静态类中的地图有关。这就是为什么地图在这里不能按预期工作的原因吗?

资源池相关代码

如何使用的相关代码

结果是,add 返回 NULL,因为没有找到任何东西。这个程序不会崩溃,因为我没有对纹理做任何事情,现在只是测试插入。

0 投票
1 回答
275 浏览

c# - 这个静态类会在多用户场景中中断吗?

假设我使用扩展方法创建了一个静态类,如下所示:

在多用户系统中,状态管理字典会无法为变换算法提供正确的值吗?常规类会是更好的设计,还是将 Dictionary 推入方法中是更好的设计?

0 投票
0 回答
1073 浏览

c++-cli - 类库 - 静态库 - 链接器问题 LNK4221

我正在使用带有 /clr 的 VS2008,类库模板。我想要一个托管的类库。当我将库编译为 dll 时,一切正常。

头文件:multiclasses.h

源文件:multiclasses.cpp

当我将配置类型更改为静态库(.lib)时,我收到链接器警告:警告

警告 LNK4221:未找到公共符号;存档成员将无法访问

因此,使用这个库的项目给出:

错误 1 ​​error LNK2020: unresolved token (06000001) multiclasses.Class1::add

错误 2 error LNK2020: unresolved token (06000002) multiclasses.Class1::hadd

错误 3 error LNK2020: unresolved token (06000004) multiclasses.Class2::add

错误 4 error LNK2020: unresolved token (06000005) multiclasses.Class2::hadd

有什么办法可以将类库编译为静态库(.lib)?
我可以在静态库中导出类吗?尝试在静态库中导出类是根本错误的吗?

0 投票
2 回答
660 浏览

lucene - Lucene 标记文本的过程

这可以被视为一般 Java 问题,但为了更好地理解,我使用 Lucene 作为示例。

您可以在 Lucene 中使用不同的 Tokenizer 来标记文本。有主要的抽象 Tokenizer 类,然后是许多不同的扩展它的类。TokenFilter 也是一样。

现在,似乎每次您想要索引文档时,都会创建一个新的 Tokenizer。问题是,既然 Tokeinzer 只是一个实用程序类,为什么不让它成为静态的呢?例如,将所有字母转换为小写的 Tokenizer 可以有一个静态方法,该方法对它获得的每个输入都执行此操作。为我们要索引的每段文本创建一个新对象有什么意义?

值得一提的是——Tokeinzer 有一个私有字段,其中包含它接收到的用于标记化的输入。我只是不明白为什么我们需要以这种方式存储它,因为对象在标记化过程结束后立即被销毁并返回新的标记化文本。我唯一能想到的可能是多线程访问?

谢谢!