Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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#静态字段之间有什么区别?_C#_Attributes_Field - Fatal编程技术网

C#属性和C#静态字段之间有什么区别?

C#属性和C#静态字段之间有什么区别?,c#,attributes,field,C#,Attributes,Field,根据微软的文件 属性提供了将元数据或声明性信息与代码关联的强大方法 即使没有创建类的实例,静态成员也可以在类上调用。静态成员总是通过类名而不是实例名进行访问 但根据我的理解,属性和静态字段都是 可以在运行时访问 绑定类,而不是对象 那么它们之间有什么区别呢?定义 静态数据字段或属性是封装在类定义抽象中的变量 属性是添加到类类型或成员字段、属性或方法中的装饰、参数,而不是数据本身 属性本身不做任何事情,也不代表任何数据或代码:它是添加到代码中的概念工件,代码可以通过某种方法使用它来更改行为 属性是

根据微软的文件

属性提供了将元数据或声明性信息与代码关联的强大方法

即使没有创建类的实例,静态成员也可以在类上调用。静态成员总是通过类名而不是实例名进行访问

但根据我的理解,属性和静态字段都是

  • 可以在运行时访问
  • 绑定类,而不是对象

  • 那么它们之间有什么区别呢?

    定义

    静态数据字段或属性是封装在类定义抽象中的变量

    属性是添加到类类型或成员字段、属性或方法中的装饰、参数,而不是数据本身

    属性本身不做任何事情,也不代表任何数据或代码:它是添加到代码中的概念工件,代码可以通过某种方法使用它来更改行为

    属性是一个类,它可以包含用于管理类的某些行为的数据和方法

    属性允许在抽象和封装之间进行更多的分离

    它们允许更好地优化设计,并在编码时专门化行为,同时允许泛化

    示例

    以这一类为例:

    public class LogFile
    {
      static public List<LogFile> LogFiles { get; private set; }
    }
    
    在这里,它是在代码级别添加到类定义中的代码标记,除非使用反射,否则无法更改,并且logfile manager类可以使用它定义保存路径,如临时文件夹、用户应用文件夹或运行时定义的路径(以与常量或默认值不同的分离方式)

    因此,在本例中,log file save方法将检查类属性,以了解保存它的位置

    一个属性允许编码人员参数化他们定义的类以及子类和任何类成员

    一个典型的例子是Serializable属性:

    教程


    定义

    静态数据字段或属性是封装在类定义抽象中的变量

    属性是添加到类类型或成员字段、属性或方法中的装饰、参数,而不是数据本身

    属性本身不做任何事情,也不代表任何数据或代码:它是添加到代码中的概念工件,代码可以通过某种方法使用它来更改行为

    属性是一个类,它可以包含用于管理类的某些行为的数据和方法

    属性允许在抽象和封装之间进行更多的分离

    它们允许更好地优化设计,并在编码时专门化行为,同时允许泛化

    示例

    以这一类为例:

    public class LogFile
    {
      static public List<LogFile> LogFiles { get; private set; }
    }
    
    在这里,它是在代码级别添加到类定义中的代码标记,除非使用反射,否则无法更改,并且logfile manager类可以使用它定义保存路径,如临时文件夹、用户应用文件夹或运行时定义的路径(以与常量或默认值不同的分离方式)

    因此,在本例中,log file save方法将检查类属性,以了解保存它的位置

    一个属性允许编码人员参数化他们定义的类以及子类和任何类成员

    一个典型的例子是Serializable属性:

    教程


    你说得对,它们有一些相似之处。但这并不相同,他们彼此相距很远。这就像比较玻璃和笔记本电脑,因为两者都很硬,可能会损坏。也许只是WrTe是什么用例,然后我们可以给你一些优点和缺点,我学习C++,我来自C++。所以我对什么属性可以做静态字段不能做的事情感到困惑。字段(静态或其他)是一个运行时变量。属性是一个类,其实例可以在编译时附加到其他类。属性的用途是修饰类、方法、属性或字段,您可以将它们附加到任何类,并以多种方式使用,例如说如何验证属性,添加一些人性化的描述,这些描述将在调用.ToString()时显示,您可以将方法参数修饰为
    CallerMemberName
    ,并将调用者成员名称指定为参数值,但大多数操作都不能使用静态字段。您将主要使用静态字段来声明一些constants@YongdaFan属性最常见的用例之一是序列化——例如,在流行的包中,它们可以用来描述类应该如何序列化/反序列化。同样的方法也可以在许多其他库中看到,包括内置库。没错,它们有一些相似之处。但这并不相同,他们彼此相距很远。这就像比较玻璃和笔记本电脑,因为两者都很硬,可能会损坏。也许只是WrTe是什么用例,然后我们可以给你一些优点和缺点,我学习C++,我来自C++。所以我对什么属性可以做静态字段不能做的事情感到困惑。字段(静态或其他)是一个运行时变量。属性是一个类,其实例可以在编译时附加到其他类。属性的用途是修饰类、方法、属性或字段,您可以将它们附加到任何类,并以多种方式使用,例如说如何验证属性,添加一些人性化的描述,这些描述将在调用.ToString()时显示,您可以将方法参数修饰为
    CallerMemberName
    ,并将调用者成员名称指定为参数值,但大多数操作都不能使用静态字段。您将主要使用静态字段来声明一些