问题标签 [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.
.net - 静态类和业务对象 COM 库
下面的代码来自一个 winforms 应用程序,它在按钮事件上打开业务对象 6.5 的实例,刷新报表,然后将报表中的数据转储到 csv 文件中,然后退出业务对象实例。
我第一次运行代码时它工作得很好,但是如果我再次运行它,我会遇到异常
抛出的异常是“无效对象”。
我假设这是因为 boApp 没有被重新初始化,问题是我缺乏关于静态类的知识。
调用方法是这样的:
这是 BO_Control 类
c# - 文本框未在 C# 中更新
专门查看 Customer 类中的到达方法。我正在使用 for 循环来创建客户类的实例,当我尝试将他们的到达时间写出到文本框(仅用于测试目的)时,文本框不会更新。为什么是这样?
这只是我的计算机课的一个小型模拟项目。它处于早期阶段,并且在很多地方可能是错误的!
c# - 可接受使用静态类?
有一个原本不应该是静态的类...
在构建课程时,我决定(1)除非我明确刷新它,否则我宁愿不重新填充数据集,并且(2)我是这些数据的看门人;没有其他人应该更新它们。此类从 WCF 服务中调用。
除了我想重用的数据集,没有状态;此类上的每个函数都可以设为静态。但是将类设为静态是否可以接受?与实例化它并在 WCF 上拥有一个成员级变量来保存它相反。我不确定我能看到这两种方法之间的区别。
为了减少争论,让我问:将类设为静态有什么缺点?我可能不想这样做的原因。
随意批评这种方法;通常我会在 ProcessApprovals 中创建数据集并在调用结束时将其处理掉,但我真的不需要经常刷新数据,如果有的话(我有一个单独的数据集,其中包含更多的临时数据,我将在每个我更新它的时间;SapGs3DataSet 数据真的不会改变)。
另一种方法是使用企业库来缓存数据集,它可以让我设置诸如过期和刷新数据的方法等内容。
我将根据最有力的论据来选择答案,为什么我不应该这样做。如果没有任何强烈的理由不这样做,我会以最好的理由选择答案,说明为什么可以这样做。
蒂亚!
詹姆士
php - 带有静态类的适配器模式
我正在寻找一种在 PHP 5.x 中使用静态类实现适配器模式的好方法。
我想使用它的示例之一是与 Python 的os.path.join()
. 我将有两个适应者,一个 Windows 和一个 Linux 适应者类。
我认为将这些类实现为静态类是合理的,因为它们没有“上下文”。他们不需要存储任何状态,并且每次我需要一个实例时都创建一个实例似乎是多余的——因此我正在寻找一种干净的方法来实现它。
让我们考虑以下虚假实现:
您会注意到的第一件事是,它假定了一个名为adaptee 的已初始化静态成员,该成员将保存必要的、依赖于操作系统的实现细节。
这要求我有一个任意命名的类似静态构造函数的函数,我会在类声明之后立即调用它。(用这种方法困扰我的另一件事)。
当然,我可以$adaptee
在每个方法调用上初始化一个局部变量,但这似乎不合适,我必须在需要适配器的每个其他静态函数中复制它。
现在......对于 PHP 的类实现细节:它们不是一流的对象,所以我不能只将类作为参数传递。在示例中,它要求我将 Adaptees 创建为非静态(这个术语是什么?)类,然后实例化它并最终将其分配给$adaptee
Adapter 类的静态成员变量。
或许这只是我的这种奇怪的、完全主观的想法……但我真的觉得这样不合适。您对更好的实施有任何想法吗?
我的另一个想法是,改为存储适配者的类名,然后使用call_user_func
,但我觉得使用这种方法不太舒服。
更新
我可能没有正确描述这一点,所以我将尝试在更新中解释这一点:
我不是在寻找如何获得底层操作系统,但我想有一个简洁的方法,让静态类根据操作系统是 Linux、Windows、FreeBSD 还是其他东西而采取不同的行动。
我想到了适配器模式,但是由于我没有静态构造函数,因此我无法真正初始化该类。一种方法是在每个公共静态方法调用开始时对其进行初始化(或仅检查它是否已初始化)。
另一种可能性是,创建一个类似于静态构造函数的方法,并在声明后立即调用它。这可能会奏效,但我只是想知道还有哪些其他可能更优雅的方法来实现这一目标。
至于我最初的例子:它应该是一个实用函数,它实际上不需要保存任何类型的状态,所以我不是在寻找任何类型的路径对象。我想要的是一个路径工厂函数,它返回一个字符串,而不必在每次调用时区分不同的操作系统。“库”——让我创建了一个静态类作为我的相关实用程序函数的伪命名空间,以及适配器模式需要支持的不同实现细节。现在我正在寻找一种优雅的方式,将两者结合起来。
c# - 如何序列化静态类的非静态子类
我想序列化一个非常普通的类,但问题是它嵌套在这样的静态类中:
这段代码:
产生此错误:
这个错误似乎完全无关紧要。StaticClass.SomeType
不是静态类型。
有没有解决的办法?我认为这个错误是愚蠢的,我错了吗?
c# - 从数组中引用静态类?
我有一个数字列表,每个相同的数字应该完全相同。所以我对每个数字都有静态类,所以如果我改变类,它引用的所有数字也会改变。
访问数字的方式是通过包装函数,所以我不直接引用数组,例如:
那么,我该怎么做呢?
c++ - std::map 无法插入对象
我正在制作的程序需要各种类型资源的访问池,但只有少数类可以访问。资源池也是它自己的类。因此,我决定为资源池使用一个静态类,并让其他人以这种方式访问它。
但是我在向池中添加资源时遇到了一个奇怪的问题。每个池都表示为一个 std::map,插入后,映射仍然为空。我猜这与静态类中的地图有关。这就是为什么地图在这里不能按预期工作的原因吗?
资源池相关代码
如何使用的相关代码
结果是,add 返回 NULL,因为没有找到任何东西。这个程序不会崩溃,因为我没有对纹理做任何事情,现在只是测试插入。
c# - 这个静态类会在多用户场景中中断吗?
假设我使用扩展方法创建了一个静态类,如下所示:
在多用户系统中,状态管理字典会无法为变换算法提供正确的值吗?常规类会是更好的设计,还是将 Dictionary 推入方法中是更好的设计?
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)?
我可以在静态库中导出类吗?尝试在静态库中导出类是根本错误的吗?
lucene - Lucene 标记文本的过程
这可以被视为一般 Java 问题,但为了更好地理解,我使用 Lucene 作为示例。
您可以在 Lucene 中使用不同的 Tokenizer 来标记文本。有主要的抽象 Tokenizer 类,然后是许多不同的扩展它的类。TokenFilter 也是一样。
现在,似乎每次您想要索引文档时,都会创建一个新的 Tokenizer。问题是,既然 Tokeinzer 只是一个实用程序类,为什么不让它成为静态的呢?例如,将所有字母转换为小写的 Tokenizer 可以有一个静态方法,该方法对它获得的每个输入都执行此操作。为我们要索引的每段文本创建一个新对象有什么意义?
值得一提的是——Tokeinzer 有一个私有字段,其中包含它接收到的用于标记化的输入。我只是不明白为什么我们需要以这种方式存储它,因为对象在标记化过程结束后立即被销毁并返回新的标记化文本。我唯一能想到的可能是多线程访问?
谢谢!