是否可以只指定自动属性的一个操作(获取/设置)并实现另一个操作

本文关键字:操作 获取 一个 设置 另一个 实现 属性 是否 | 更新日期: 2023-09-27 17:56:08

我对 C# 很陌生,并且完全是自学成才的,通过试验和(很多)错误,所以如果这是一个愚蠢的问题,请提前道歉。

到目前为止,在创建类时,我几乎只是将每个变量都公开,这样我就可以对它们做我想做的事。

在阅读了很多关于为什么这是一个坏主意(不是我完全理解它)之后,我现在倾向于写:

public string name { get; set; }

而不是我以前使用的:

public string name;

当它如此简单时,我理解速记(我可以看到为什么它对于插入断点和使用以下内容很有用:公共字符串名称 { get; 私有集; }。

但是,以下内容的简写是什么:

private double _grip;
public double grip
{
    get
    {
        return _grip;
    }
    set
    {
        if (value > 100) { _grip = 100; }
        else if (value < 0) { _grip = 0; }
        else { _grip = value; }
    }
}

每次我想对变量设置条件时都必须声明一个私有变量似乎有点笨拙。

我想写的是这样的:

public double grip
{
    get;
    set
    {
        if (value > 100) { grip = 100; }
        else if (value < 0) { grip = 0; }
        else { grip = value; }
    }
}

一旦获取和设置最小化,就将其整齐地放在一行上。但是这不起作用(尽管我确实遇到了我的第一个堆栈溢出错误,这很有趣)。

那么 - 上面有简写吗?我试图搜索和阅读很多关于getterssetters的信息,但找不到这样做的东西。

是否可以只指定自动属性的一个操作(获取/设置)并实现另一个操作

不,如果您为其中一个方法(gettersetter)提供自定义实现,则您的属性不再是自动实现的属性。所以你需要继续使用这个版本:

private double _grip;
public double grip
{
    get
    {
        return _grip;
    }
    set
    {
        if (value > 100) { _grip = 100; }
        else if (value < 0) { _grip = 0; }
        else { _grip = value; }
    }
}