Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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#_Struct - Fatal编程技术网

C# 为什么要在结构定义中从自身定义结构对象

C# 为什么要在结构定义中从自身定义结构对象,c#,struct,C#,Struct,在下面的代码中,定义了一个结构。在定义中,有一些从自身创建的结构。对我来说,它就像镜子中的镜子,或者将递归函数称为递归函数。因为你正在定义一些变量,而变量还没有定义,我的意思是它本身?? 它是如何工作的? 为什么我们一般使用它? 效果如何 谢谢你的解释 public struct **PersonId** { public static readonly **PersonId** default= new PersonId(value,1,1); public static re

在下面的代码中,定义了一个结构。在定义中,有一些从自身创建的结构。对我来说,它就像镜子中的镜子,或者将递归函数称为递归函数。因为你正在定义一些变量,而变量还没有定义,我的意思是它本身?? 它是如何工作的? 为什么我们一般使用它? 效果如何

谢谢你的解释

public struct **PersonId**
{
    public static readonly **PersonId** default= new PersonId(value,1,1);
    public static readonly **PersonId** x = new PersonId(someValue, 0, 0);
    public static readonly **PersonId** y = new PersonId(someOtherVale,-1,0);

    [DataMember]
    public int Prop1 { get; private set; }
    [DataMember]
    public int Prop2 { get; private set; }
    [DataMember]
    public int Prop3 { get; private set; }

    public PersonId(int prop1 , int prop2 , int prop3 )
        : this()
    {
        Prop1 = prop1 ;
        Prop2 = prop2 ;
        Prop3 = prop3 ;
    }

静态
视为全局变量-实际上,您将
默认
x
y
声明为全局变量(*)

如果您无法做到这一点,您希望
DateTime.MinValue
这样的东西如何工作

public static readonly DateTime MinValue = new DateTime(0L, DateTimeKind.Unspecified);
请注意,如果如中所述删除了
静态
,代码将无法编译


(*)严格来说不是真的,但现在请坚持我的观点。

静态
视为全局变量-实际上,您将
默认值
x
y
声明为全局变量(*)

如果您无法做到这一点,您希望
DateTime.MinValue
这样的东西如何工作

public static readonly DateTime MinValue = new DateTime(0L, DateTimeKind.Unspecified);
请注意,如果如中所述删除了
静态
,代码将无法编译


(*)严格说来不是真的,但现在请坚持我的观点。

OP:我认为你需要更加关注你的问题。。。比如你没有得到什么?首先,将它与递归函数进行比较,递归函数也是完全允许的,我从未见过有人问过它们是如何工作的。有助于缩小你想知道的范围的问题。。。您是否在问规范的哪一部分允许它引用自身?您想知道编译器是如何解析和处理源代码的吗?然后你也开始问一些问题,比如“我们为什么要使用它?”和“效果是什么”,这些问题似乎与它的工作方式/原因完全不同……在你的头脑中,静态场在哪里声明,为什么它很重要?这是静态的。OP:我认为你需要更加关注你的问题。。。比如你没有得到什么?首先,将它与递归函数进行比较,递归函数也是完全允许的,我从未见过有人问过它们是如何工作的。有助于缩小你想知道的范围的问题。。。您是否在问规范的哪一部分允许它引用自身?您想知道编译器是如何解析和处理源代码的吗?然后你也开始问一些问题,比如“我们为什么要使用它?”和“效果是什么”,这些问题似乎与它的工作方式/原因完全不同……在你的头脑中,静态场在哪里声明,为什么它很重要?它是静态的。在您提供的链接中,提到类不需要“静态”吗?但当你不使用“静态”这个词时,首先会创建一个员工。还将在员工中创建经理,创建经理时,将在经理中创建另一个经理。它继续下去,没有停止。不是吗??公共类Employee{public Employee(Employee manager){this.manager=manager;}公共字符串a{get;set;}公共字符串b{get;set;}公共字符串c{get;set;}公共员工经理{get;set;}@Wolfgang该线程的全部要点是,如果self按值包含为数据成员,则它只会导致包含的无限循环,即不作为某个方法的引用或返回类型(静态或非静态)。如果“包含”采用了后一种形式,那就没有问题了。@Wolfgang您最初的帖子是关于结构的,而不是类。如果你有一个关于课程的问题,那么你最好发布一个新的问题来讨论。结构和类完全不同。@下划线\u d:您的“整点”是正确的。但是“static”并不是您提到的返回类型。将其定义为“静态”可以防止代码像mjwills解释的那样产生无限循环,我认为..@Wolfgang不,我没有说静态是返回类型。我说这是一种方法的属性。“某个方法的返回类型(静态或非静态)”我的观点是,问题在于它将结构作为其自身的一个成员,而如果它有一个返回其自身类型的方法,这是可以的。不管这个方法是否是静态的,在你给出的链接中,有人提到类不需要“静态”吗?但当你不使用“静态”这个词时,首先会创建一个员工。还将在员工中创建经理,创建经理时,将在经理中创建另一个经理。它继续下去,没有停止。不是吗??公共类Employee{public Employee(Employee manager){this.manager=manager;}公共字符串a{get;set;}公共字符串b{get;set;}公共字符串c{get;set;}公共员工经理{get;set;}@Wolfgang该线程的全部要点是,如果self按值包含为数据成员,则它只会导致包含的无限循环,即不作为某个方法的引用或返回类型(静态或非静态)。如果“包含”采用了后一种形式,那就没有问题了。@Wolfgang您最初的帖子是关于结构的,而不是类。如果你有一个关于课程的问题,那么你最好发布一个新的问题来讨论。结构和类完全不同。@下划线\u d:您的“整点”是正确的。但是“static”并不是您提到的返回类型。将其定义为“静态”可以防止代码像mjwills解释的那样产生无限循环,我认为..@Wolfgang不,我没有说静态是返回类型。我说这是一种方法的属性。“某个方法的返回类型(静态或非静态)”我的观点是,问题在于它将结构作为其自身的一个成员,而如果它有一个返回其自身类型的方法,这是可以的。不管这个方法是否是静态的。