Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从类中调用变量而不调用类-c#?_C#_Class - Fatal编程技术网

如何从类中调用变量而不调用类-c#?

如何从类中调用变量而不调用类-c#?,c#,class,C#,Class,我想使用此类中的常量变量: class foo { public const bool x = true; } 有没有办法不用foo.x就使用x 我想这样使用它: if( x ) 不是这样的: if( foo.x ) 首先,它需要公开访问 public class foo { public const bool x = true; } 然后你可以把这个值存储在一个变量中 var x = foo.x; if(x) { .. } 实现这一点的唯一方法是将foo标记为

我想使用此类中的常量变量:

 class foo
 {
    public const bool x = true;
 }
有没有办法不用foo.x就使用x

我想这样使用它:

if( x ) 
不是这样的:

if( foo.x )

首先,它需要公开访问

public class foo
{
    public const bool x = true;
}
然后你可以把这个值存储在一个变量中

var x = foo.x;
if(x) { .. }

实现这一点的唯一方法是将
foo
标记为静态,并在希望访问
foo.x
的位置使用
x

namespace Foo
{
    static class Bar
    {
         public const bool x = true;
    }
}
后来:

using static Foo.Bar;
Console.WriteLine(x);

使用static
是一种C#特性,因此在使用C#6之前请确保使用它。

否,成员始终是类的成员,因此您必须通过类名调用静态(或常量)变量,或者调用实例上的成员

因此,这将起作用:

public class Foo { public static int SomeInt {get;set;} = 12; }

int i = Foo.SomeInt;
或:


如Marcin所示,您可以通过使用静态的
来隐藏真相。不过,它是通过类调用的。

除非您在
foo
类中,否则不会调用。
foo.x
有什么问题吗?
foo.x
也不会工作,除非你将
x
标记为public。格洛林是对的。无论如何,你不能把它称为x,因为它是在a中定义的class@cnom在C#中没有全局变量。所有东西都必须在类或结构上下文中声明。如果有人可以在不创建foo的情况下使用x,那么x与foo是解耦的。那么,为什么要将它放在foo中呢?您仍然在使用类引用,但是您正在使用
通过
隐藏它。虽然很聪明…@Patrickhoffman是的。但使用
的常规
也是一样的-实际上,您在名称空间中使用完全限定名,但使用
将其隐藏在
后面。是的,没错。我只是想指出这其实没什么不同。太聪明了,太有可能被滥用,代码也不清楚:)。但这是一个很好的选择。@DavidL我认为它主要用于将给定静态类中定义的范围扩展方法引入(而不是来自给定命名空间的所有方法)。但实际上你可以带任何东西:)
public class Foo { public int SomeInt {get;set;} = 12; }

Foo f = new Foo();
int i = foo.SomeInt;