Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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

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

C# 属性和公共变量

C# 属性和公共变量,c#,oop,C#,Oop,我很难理解属性的逻辑,因为我在互联网上看到,使用属性而不是公共变量更符合逻辑,也更安全。但我想了解属性的逻辑,让它在我的脑海中浮现 private int myVar; public int MyProperty { get { return myVar; } set { myVar = value; } } public int myVar; 使用属性而不是公共变量有什么好处?为什么我不应该在类中编写公共变量并使用from实例?根据您的注释,您希望在设置值之前执行代码。简单

我很难理解属性的逻辑,因为我在互联网上看到,使用属性而不是公共变量更符合逻辑,也更安全。但我想了解属性的逻辑,让它在我的脑海中浮现

private int myVar;

public int MyProperty
{
    get { return myVar; }
    set { myVar = value; }
}
public int myVar;

使用属性而不是公共变量有什么好处?为什么我不应该在类中编写公共变量并使用from实例?

根据您的注释,您希望在设置值之前执行代码。简单的例子是:

  class Example
    {
        DayOfWeek _day;
        public DayOfWeek Day
        {
            // whenever you try to get this value, it will run this block
            get
            {
                // We don't allow this to be used on Friday.
                if (this._day == DayOfWeek.Friday)
                {
                    throw new Exception("Invalid access");
                }
                return this._day;
            }
            // whenever you try to set its value, it will run this block
            set
            {
                // We dont allow to set if it is saturday
                if (value == DayOfWeek.Saturday)
                {
                    throw new Exception("Invalid access");
                } 
                this._day = value;
            }
        }
    }
getter和setter基本上允许您在访问/设置值之前执行“轻量级”代码

但是如果要在属性中执行代码,请确保编写的是属性而不是方法。一个属性应该比一个方法做更少的工作——更少的工作。属性应该是轻量级的。如果您的属性需要花费大量精力,那么应该将其重构为显式方法。
还有更多。。请阅读,因为其中有一些有用的内容。

简而言之,属性允许您使用
private
修饰符限制对getter或setter的访问,并在其中执行一些代码。@aepot so inside set如果我将其设为like if(myvar==15)else if(myvar==30)每当我试图修改这个myVar变量时,它都会执行其中的所有if和else?你到底想做什么?请再解释一下是的,代码将照常执行,您可能会在setter的计算中使用保留字
。这就是我想全面了解的内容,非常感谢(var olasın yurtdaş)