标签: static-classes

在遵循测试驱动开发范例时,我是否应该永远不会使用静态方法,类和单例

我一直在阅读当你尝试在项目中实现单元测试时,静态方法,静态类和单例是邪恶的.在遵循TDD范例时,我是否应该忘记它们曾经存在过并且从未再次使用它们,或者有时可以使用它们吗?

tdd singleton static-methods design-patterns static-classes

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

如何在Main()方法之前在C#中运行静态初始化方法?

给定一个带有初始化方法的静态类:

public static class Foo
{
    // Class members...

    internal static init()
    {
        // Do some initialization...
    }
}
Run Code Online (Sandbox Code Playgroud)

如何确保之前运行初始化程序Main()

我能想到的最好的是将其添加到Foo:

    private class Initializer
    {
        private static bool isDone = false;
        public Initializer()
        {
            if (!isDone)
            {
                init();
                isDone = true;
            }
        }
    }
    private static readonly Initializer initializer = new Initializer();
Run Code Online (Sandbox Code Playgroud)

这会有用还是有一些不可预见的警告?还有更好的方法吗?

.net c# static-methods static-classes static-initialization

15
推荐指数
4
解决办法
2万
查看次数

ASP.NET Core Web API从静态类登录

我在我的控制器上使用依赖注入正好记录,现在我需要静态类中记录一些东西.

如何静态类登录?

我不能使用依赖注入,因为它是静态的,我不能只将现有的logger对象传递给静态类,因为它在日志文件中会有错误的类名.

换句话说,如何从静态类中的loggerfactory中获取记录器?

我遇到了一个类似的问题,他们指出了一篇关于静态类中loggerfactory的文章,但实际上并没有工作,因为我无法从中获取新的记录器,因为它不会接受静态类作为参数:

"静态类型不能用作类型参数"

logging dependency-injection static-classes asp.net-core asp.net-core-webapi

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

Laravel:从视图中调用base_controller中定义的函数

在使用laravel框架时,如何在视图中调用base_controller中定义的函数.例如:

class Base_Controller extends Controller {

    public static function format_something()
    {
         return something;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在视图文件中调用format_something()?

通常我得到的错误看起来像这样:方法[link_to_action]没有在View类上定义.

可能是一个愚蠢的问题,但提前感谢!

编辑

好的!首先,做这样的事情的正确位置是在libraries文件夹中.第二,问题是你的班级不能有下划线.

所以在应用程序/库中我用class创建了AppHelper.php文件

class AppHelper {

    public static function format_something()
    {
        return something;
    }
}
Run Code Online (Sandbox Code Playgroud)

可以称之为:

$formated = AppHelper::format_something;
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助和良好的论坛找到Boofus McGoofus.

php static-classes laravel

14
推荐指数
2
解决办法
1万
查看次数

重构静态类以用于依赖注入

我们需要在具有静态方法的代码中使用非托管库.我想在我的代码中将库操作作为依赖项引入.除了具有静态方法之外,库还具有初始化方法和设置方法,两者都是全局的.所以我不能将它包装在一个实例类中,因为如果一个实例更改了一个设置,那么所有其他实例都会受到影响,如果一个实例被初始化,所有其他实例都将被重新初始化.

我想把它作为一个单独的类引入.这样它将在实例类中,但只有一个实例,因此我不必担心更改设置或初始化.您如何看待这种方法?我对依赖注入模式很新,我不确定单例模式是否是一个好的解决方案?您对类似案例的解决方案是什么?

编辑:初始化也接受一个参数,所以我不能只是锁定方法调用,并在每次调用时重新初始化和更改设置.

编辑2:以下是一些方法的签名:

public static void Initialize(int someParameter)
// Parameter can only be changed by re-initalization which
// will reset all the settings back to their default values.

public static float[] Method1(int someNumber, float[] someArray)

public static void ChangeSetting(string settingName, int settingValue)
Run Code Online (Sandbox Code Playgroud)

c# singleton refactoring dependency-injection static-classes

14
推荐指数
1
解决办法
2万
查看次数

扩展方法与实例方法与静态类

我对使用方法与C#中的对象进行交互的不同方式有点困惑,特别是以下主要设计差异和后果:

  1. 调用实例方法
  2. 在POCO上使用静态类
  3. 创建扩展方法

例:

public class MyPoint
{
    public double x { get; set; }
    public double y { get; set; }

    public double? DistanceFrom(MyPoint p)
    {
        if (p != null)
        {
            return  Math.Sqrt(Math.Pow(this.x - p.x, 2) + Math.Pow(this.y - p.y, 2));
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您只需将方法放在类定义中就可以完成所需的结果,那么为什么POCO与静态辅助类或扩展方法结合起来会更好?

c# extension-methods poco static-classes instance-methods

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

C#中的抽象类与静态类

可能重复:
抽象类和静态类之间有什么区别?

您好
我想知道C#中抽象类和静态类之间的区别是
什么?我什么时候使用?为什么?

是抽象类是一个我们无法创建它的实例的类吗?
谢谢

c# abstract-class static-classes

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

低级差异:使用静态方法的非静态类与使用静态方法的静态类

我想知道使用静态类的静态类与使用相同静态方法的静态类的一般好处(或缺点),除了我不能使用非静态类的静态方法扩展方法.

例如:

class NonStaticClass
{
    public static string GetData()
    {
        return "This was invoked from a non-static class.";
    }
}
Run Code Online (Sandbox Code Playgroud)

对此:

static class StaticClass
{
    public static string GetData()
    {
        return "This was invoked from a static class.";
    }
}
Run Code Online (Sandbox Code Playgroud)

使用一种方法比另一种方法有什么性能/内存含义?

注意:假设我不需要实例化该类.我的用例场景仅限于以下内容:

Console.WriteLine(NonStaticClass.GetData());
Console.WriteLine(StaticClass.GetData());
Run Code Online (Sandbox Code Playgroud)

.net c# performance static-classes

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

静态类声明受保护的成员

我正在阅读"C#语言"这本书,并从Vladimir Reshetnikov那里得到了这个音符:

如果静态类声明受保护或受保护的内部成员,则会发生编译时错误(CS1057).

我可以知道为什么吗?有受保护成员的静态类有什么问题?静态类可以有私有成员所以我猜这个CS1057错误不是由于可访问性,但也许是因为编译问题?因为受保护的成员可以在子类中被覆盖......但我无法弄清楚为什么.

c# compiler-errors static-classes

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

如何在Swift中创建静态类?

我正在寻找一个名为VectorCalculator的静态类.也许这个函数应该放在我的Vector类中(类似于NSString的 - -stringByAppendingStringObj-C中的方法)......如果你认为......让我知道.

无论如何,我想在一个名为VectorCalculator的静态类中添加几个静态函数.它将计算'点积'并返回一个Vector.另一个功能可能是"计算并返回两个给定矢量之间的角度".

A)是否有人会为此创建一个静态类

B)我应该将这些函数添加为Vector类的实例函数,例如...... public func dotProductWithVector(v: Vector) -> Vectorpublic func angleWithVector(v: Vector) -> Double.然后这两个参数向量v将应用于Vector类main Vector u.

去A或B有什么好处?

如果您认为B,仅供将来参考,您将如何在Swift中创建一个全静态类?

static-classes swift

12
推荐指数
2
解决办法
2万
查看次数