标签: static-classes

如果一个类是对象的蓝图,那么静态类呢?

阅读C#Step by Step,作者提到该类只是对象的蓝图,本身也没用.那么,静态类怎么能单独工作呢?

我确实理解静态类无法实例化的概念,并且作为一个具有静态成员的唯一实例存在.但那个废墟,有点像班级的比喻作为蓝图.如何根据这个蓝图的想法解释静态类?

.net c# class static-classes

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

Lucene标记文本的过程

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

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

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

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

谢谢!

lucene static-classes

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

枚举和使用带常量的静态类有什么区别?

这两个项目之间的性能影响是什么?我最近在野外见过静态类,我不知道该怎么做.

public enum SomeEnum
{
   One = 1,
   Two,
   Three
}

public static class SomeClass
{
   public static readonly int One = 1;
   public static readonly int Two = 2;
   public static readonly int Three = 3;
}
Run Code Online (Sandbox Code Playgroud)

c# performance enums static-classes

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

C#中是否有内置类型包含bool和静态方法返回的字符串?

我正在寻找一种从函数或方法返回的类型,首先传达它是否成功,然后将消息(作为字符串)附加到它以传递有关其失败原因的更多信息.它可能是应用程序退出代码的一部分; 但是,我不创建一整套退出代码来索引特定的错误消息.我喜欢单个"成功"退出代码的想法,因此可以快速检查呼叫是否失败并相应地工作.

我想把它作为一系列静态方法(如服务调用)的返回类型,为此我可以创建一个包含这两个字段的类(bool和string); 但是,我觉得这些可能已经存在,尽管我还没有找到它.此外,如果有更好的做法来处理从方法获得此类信息的返回,或者完全反对这些静态类的一般规则,我欢迎您的意见.

为了更好的可视化

    public static <type> CreateSomething(string somethingName)
    {
        ...
        return new <type>("Fail!", "Because...");
    }
Run Code Online (Sandbox Code Playgroud)

.net c# types static-classes

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

PHP避免使用静态类来避免依赖,但我需要在任何地方使用全局

很多时候我听说要避免使用静态类,因为它们会插入依赖项,这会导致代码在其他项目中无法使用,并且不允许对其进行单元测试.

假设我们有一个典型class DB的访问数据库,如果这样的类static我们可以在我们的代码中的任何地方调用它:

DB::execQuery(...);
Run Code Online (Sandbox Code Playgroud)

但是这会产生依赖关系,所以让我们使DB类不是静态的,在这种情况下我们会在代码中的某个地方:

$db = new DB();
Run Code Online (Sandbox Code Playgroud)

然后我们可以调用我们的代码

$db->execQuery(...);
Run Code Online (Sandbox Code Playgroud)

但是现在当使用$db内部时function我们需要每次都像这样首先声明它

global $db;

有办法解决这个问题吗?

一种方法可能是$db在使用它的类中注入对象,但我必须在使用它的所有类中注入它,这是荒谬的,静态类可以更快地处理并且编写更少的代码.我错过了什么吗?!

php static global global-variables static-classes

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

如何制作可插入的静态类

我知道如何在c#中制作可插拔的东西.定义一个接口,Activator.CreateInstance(<class>)等等.或者我可以有一个显式创建插件类实例的代码路径.很多种方法.

但是,如果我想要插件的服务是静态的(我知道我可以重构,所以它不是,但这不是问题的重点)

具体例子.我有一个提供磁盘I/O抽象的类(读取文件,列表目录,....).现在我想要这种抽象的不同实现,它可以提供来自真实FS,数据库的文件.

根据Olivier Jacot-Descombes的回复,我会有一个FileSystem类(这是真的)这样的

public static class FileSystem
{
    static IFSImplemenation s_imple;
    static FileSystem()
    {
        if(<some system setting>)
            // converted to singleton instead of static
            s_imple = new OldFileSystem() 
        else
            s_imple = new DbFileSystem();
    }

    public static byte[] ReadFile(string path)
    {
        return s_imple.ReadFile(path);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

重申 - 我有一大堆代码,我不想改变,所以保持调用签名相同很重要 - 这个解决方案实现了

.net c# plugins static-classes

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

在构造函数中初始化public static final变量

我正在尝试Version为我的应用程序创建一个类,它将在加载时从清单中读取版本号,然后仅参考例如Version.MAJOR我在其他地方需要它的地方.但是,我遇到了这样的问题.这是我目前的代码:

 public class Version {

    public static final int APPCODE;
    public static final int MAJOR;
    public static final int MINOR;
    public static final char RELEASE;
    public static final int BUILD;

    static {

        try {
            Class clazz = Version.class;
            String className = clazz.getSimpleName() + ".class";
            String classPath = clazz.getResource(className).toString();
            if (classPath.startsWith("jar")) {
                String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) + "/META-INF/MANIFEST.MF";
                Manifest manifest = new Manifest(new URL(manifestPath).openStream());
                Attributes attr = manifest.getMainAttributes();
                APPCODE = Integer.parseInt(attr.getValue("APPCODE"));
                MAJOR = Integer.parseInt(attr.getValue("MAJOR")); …
Run Code Online (Sandbox Code Playgroud)

java initialization constants manifest static-classes

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

如果我有一个带有dbcontext字段的静态类,这是否意味着连接在应用程序的生命周期内保持打开状态?

这可能是一个显而易见的问题......下面是我用于与数据库交互的静态类的框架.我的问题是:如果一个静态类在应用程序的持续时间内存在,那么这是否意味着字段_context将具有一个长时间保持打开状态的连接?或者如果我使用using包装我所做的调用声明,我可以确信连接只会按预期打开和关闭吗?

public static class MyStaticClass
{
    private static dbEntities _context;

    static MyStaticClass()
    {
        _context = new dbEntities();
    }

    private static void UpdateContext()
    {
        _context = new dbEntities();
    }

    public static bool DoSomething(int id)
    {
        using (var context = _context)
        {
            var result = (from x in context.table.where(p=>p.id == id) select x).FirstOrDefault();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework static-classes dbcontext

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

如何在VB.NET中为静态类编写方法扩展?

我想WriteColoredTextConsoleClass 添加一个自定义方法,如下所示:

Console.WriteColoredText(Parametters)
Run Code Online (Sandbox Code Playgroud)

问题是我只找到了有关为特定数据类型创建方法扩展的信息,但是有关类的方法扩展的信息.

如果这不可能,我有哪些类似的替代品?

.net vb.net methods extension-methods static-classes

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

如何在Javascript中使用DOJO创建静态类

我试图在JavaScript中创建一个Utility类,并使用Dojo框架.我在这里找不到关于如何在Dojo框架中正确创建静态类的任何地方.我不想每次都要创建一个新的Utility对象.我宁愿不使用Singleton.

我现在有这样的东西......

//Util.js

define(["dojo/_base/declare",
    "dojo/domReady!"], function (declare) {
        return declare(null, {
            //Pass in string format of element's ID
            clearTextBox: function (elemID) {
                document.getElementById(elemID).value = "";
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是AMD而不是旧版代码

javascript dojo static-classes

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