Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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# 如何通过setter设置属性_C# - Fatal编程技术网

C# 如何通过setter设置属性

C# 如何通过setter设置属性,c#,C#,我在学校里学过C。我们做了一些基本的事情,比如循环,if等等 现在我们做更多关于OOP的事情。老师给我们讲了一些关于自动实现属性的内容,我发现这个特性非常棒。但我很好奇如何通过方法设置属性的值 当我们不知道自动实现的属性时。我们总是使用一种方法来设置或获取类的值。 但当我使用自动实现的属性时,我并没有看到任何方法来获取或设置类实例的值。所以,当我只能通过构造函数设置值时,如何设置类的某些属性的值呢。我想知道这一点,因为当属性是私有的时,我只能通过构造函数来设置它,这不是问题,但当我想通过Cons

我在学校里学过C。我们做了一些基本的事情,比如循环,if等等

现在我们做更多关于OOP的事情。老师给我们讲了一些关于自动实现属性的内容,我发现这个特性非常棒。但我很好奇如何通过方法设置属性的值

当我们不知道自动实现的属性时。我们总是使用一种方法来设置或获取类的值。 但当我使用自动实现的属性时,我并没有看到任何方法来获取或设置类实例的值。所以,当我只能通过构造函数设置值时,如何设置类的某些属性的值呢。我想知道这一点,因为当属性是私有的时,我只能通过构造函数来设置它,这不是问题,但当我想通过Console.Readline()设置值时,我能做什么


将属性放置在表达式的左侧时,将自动对其调用set方法,并将表达式的右侧作为值


因此
car1.Size=51
就像调用Size属性的扩展setter,而
value
为51。

您的class Car具有私有属性Size,因此您不能从代码访问它,只能从class Car访问

如果要设置此属性的值,必须将其声明为公共:

 class Car
        {
            public int Size { get; set; }
        }

        static void Main(string[] args)
        {
            Car car1 = new Car();
            car1.Size = 1;
        }
这个

等同于以下声明:

public class Point {
    private int __x = 0;
    public int X { get { return __x; } set { __x = value; } }
}
这意味着您在c sharp编译器下有“两个方法”,它们使用“=”符号调用

了解有关自动属性的更多信息


顺便说一句,我不建议使用它——它破坏了代码的可读性和可重构性;(

如果该类是一个简单的贫血模型(没有逻辑),请将属性设置为
public
,它将工作

如果您想要控制不变量(业务规则),您需要一个
public Size{get;private set;}
和一个
public void SetSize(int Size){/*…*/}
来包含您的业务规则

以下是C#中通常使用的三种“模式”:

//贫血域模型(简单实体)
公车
{
公共整数大小{get;set;}
}
//具有业务规则的域模型
公车
{
公共整数大小{get;私有集;}
公共无效设置大小(整型大小)
{
//检查以确保大小在约束范围内
如果(尺寸<0 | |尺寸>100)
抛出新ArgumentException(nameof(size));
大小=大小;
}
}
//价值对象
公车
{
公共汽车(国际规格)
{
//检查大小限制
大小=大小;
}
公共整数大小{get;}
}

car1.Size=51;
应该可以工作。这就像设置一个字段一样。您还需要将
Size
设置为公共,这应该可以工作,但当Size为私有时不应该工作。如果Size`应该是私有的,您不应该从外部访问它。
public class Point {
    public int X { get; set; } = 0;
}
public class Point {
    private int __x = 0;
    public int X { get { return __x; } set { __x = value; } }
}
Point p = new Point();
p.X = 10; //c# compiler would call something like p.__set_X(10)
int i = p.X; //c# compiler would call something like int i = p.__get_X();
// Anemic domain model (simple entity)
public class Car
{
    public int Size { get; set;}
}

// Domain model with business rules
public class Car
{
    public int Size { get; private set; }

    public void SetSize (int size)
    {
        // check to make sure size is within constraints
        if (size < 0 || size > 100)
            throw new ArgumentException(nameof(size));

        Size = size;
    }
}

// Value object
public class Car
{
    public Car (int size) 
    {
        // check constraints of size
        Size = size;
    }
    public int Size { get; }
}