C# 何时不使用私有字段?

C# 何时不使用私有字段?,c#,C#,什么时候在你的类的方法中到处使用private字段会被认为是危险的?我主要只是创建变量并将其设置为默认值,如null。然后在我的方法中引用它并将其设置为方法中该对象类型的实例 我不知道我的问题是否有意义,但如果没有意义,请告诉我,我会澄清。一般来说,如果你要在你的类中使用一个字段,它应该是私有的,但这通常是一种代码气味信号状态,在许多地方都在管理 本身还不错,但在这种情况下,复杂性可能会迅速增加。一般来说,如果要在类中使用所有字段,那么它应该是私有的,但这通常可能是一种代码气味信号状态,在许多地

什么时候在你的类的方法中到处使用private字段会被认为是危险的?我主要只是创建变量并将其设置为默认值,如null。然后在我的方法中引用它并将其设置为方法中该对象类型的实例


我不知道我的问题是否有意义,但如果没有意义,请告诉我,我会澄清。

一般来说,如果你要在你的类中使用一个字段,它应该是私有的,但这通常是一种代码气味信号状态,在许多地方都在管理


本身还不错,但在这种情况下,复杂性可能会迅速增加。

一般来说,如果要在类中使用所有字段,那么它应该是私有的,但这通常可能是一种代码气味信号状态,在许多地方都在管理它


本身还不错,但在这种情况下复杂性会迅速增加。

如果您只需要在一次方法调用中使用成员,则更愿意将其作为局部变量而不是成员。本地变量越多,就越容易理解程序


如果有必要在多个调用中使用同一个对象,则可以考虑成员是否可以被只读并在构造函数中设置。

如果只在一个方法中只需要调用一个成员,那么宁愿把它变成一个局部变量而不是成员。本地变量越多,就越容易理解程序


如果有必要在多个调用中使用同一个对象,则可以考虑成员是否可以进行只读和在构造函数中设置。

< P>如果变量包含敏感数据,则应该知道它仍然可以从外部访问,反映。

否则,如果可以避免使用私有字段,则不应使用该字段。如果不能,则如果正确使用本地字段,则该字段没有问题

这是个坏主意:

public class Calculator()
{
    private int result;

    public int Add(int a, int b)
    {
        result = a + b;
        return result;
    }
}
因为如果两个线程同时调用Add()方法,并且在第一个线程设置结果后,上下文切换到第二个线程,该线程设置结果,并且两个调用都从第二个线程返回值,则可以获得竞争条件


这些错误很难调试,因为它们完全是随机的。

如果变量包含敏感数据,您应该知道它仍然可以通过反射从外部访问

否则,如果可以避免使用私有字段,则不应使用该字段。如果不能,则如果正确使用本地字段,则该字段没有问题

这是个坏主意:

public class Calculator()
{
    private int result;

    public int Add(int a, int b)
    {
        result = a + b;
        return result;
    }
}
因为如果两个线程同时调用Add()方法,并且在第一个线程设置结果后,上下文切换到第二个线程,该线程设置结果,并且两个调用都从第二个线程返回值,则可以获得竞争条件


这些错误很难调试,因为它们完全是随机的。

请举例说明。拥有一个在类中经常使用的私有字段一点也不奇怪。不清楚您的意思是什么,“我主要只是创建变量并将其设置为默认值,如null。”理想情况下,字段在构造函数中初始化为有效值,所以类不变量总是成立的。你是在问在函数中设置私有字段是否可以吗?我说的是你在类的顶部声明的私有字段,它的作用域是该类,并且仅限于该类。一个类的典型私有字段,这些字段是从该类中的各种方法引用的。在某些情况下,您不应该使用大量此类类范围的字段,因为这可能会导致冲突的更改,并且方法将引用具有不稳定值的字段,因为其他方法可能会在字段到达另一个字段之前对其进行更改。字段并不总是通过构造函数初始化。您可以让.NET Framework将它们初始化为默认类型值(bool为false等),然后您的方法可以实际设置这些值。这完全取决于你在做什么。请举个例子。拥有一个在类中经常使用的私有字段一点也不奇怪。不清楚您的意思是什么,“我主要只是创建变量并将其设置为默认值,如null。”理想情况下,字段在构造函数中初始化为有效值,所以类不变量总是成立的。你是在问在函数中设置私有字段是否可以吗?我说的是你在类的顶部声明的私有字段,它的作用域是该类,并且仅限于该类。一个类的典型私有字段,这些字段是从该类中的各种方法引用的。在某些情况下,您不应该使用大量此类类范围的字段,因为这可能会导致冲突的更改,并且方法将引用具有不稳定值的字段,因为其他方法可能会在字段到达另一个字段之前对其进行更改。字段并不总是通过构造函数初始化。您可以让.NET Framework将它们初始化为默认类型值(bool为false等),然后您的方法可以实际设置这些值。这完全取决于你在做什么。是的,我不是在说全局变量……只是私有字段。@coffeeaddict,但听起来你在使用私有字段,而局部变量也可以。这绝对是一种代码味道。。。一个不好的变量。这取决于,你的类顶部会有一些可以重用的变量……不是所有的变量都是局部变量,但大多数都是局部变量。我在类的顶部找到了2-3个可以重用的字段,例如表示构造函数设置的单例,然后我在需要它的方法之间重用该字段,因为单例不会改变……它是单例。我班上的一些方法需要它…没什么大不了的。没有理由通过每个需要它的方法的参数传递它。所以你是说你的类的顶部从来没有私有字段