如何声明和使用读/写属性

本文关键字:属性 何声明 声明 | 更新日期: 2023-09-27 18:34:22

我刚刚开始学习 C#,在以下代码的特定测试答案中提到:

Tak 的 set 属性缺失或不正确。

该代码由 2 个类组成。

1 类,主:

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            Takis obj = new Takis();
            obj.Val = 23.4;
            Console.WriteLine(obj.Val);
        }
    }
}

第 2 类:

namespace ConsoleApplication6
{
    class Takis
    {
        double val;
        public double Val
        {
            get
            {
                return val;
            }
            set
            {
                val = 3.14;
            }
        }
        public Takis()
        {    
        }
    }
}

在Visual Studio中,我并不总是得到以下内容:

'ConsoleApplication6.vshost.exe' (CLR v4.0.30319: 控制台应用程序6.vshost.exe(:已加载 'C:''Windows''Microsoft.Net''assembly''GAC_32''System.Data''v4.0_4.0.0.0__b77a5c561934e089''System.Data.dll'. 跳过加载符号。模块优化和调试器选项 "仅我的代码"已启用。'ConsoleApplication6.vshost.exe' (CLR v4.0.30319:控制台应用程序6.vshost.exe(:已加载 'C:''Windows''Microsoft.Net''assembly''GAC_MSIL''System.Xml''v4.0_4.0.0.0__b77a5c561934e089''System.Xml.dll'. 跳过加载符号。模块优化和调试器选项 "仅我的代码"已启用。线程0x1610已退出,代码为 259 (0x103(。线程0x1638已退出,代码为 0 (0x0(。线程 0x13f4已退出,代码为 259 (0x103(。 'ConsoleApplication6.vshost.exe' (CLR v4.0.30319: 控制台应用程序6.vshost.exe(:已加载 'C:''users''Stefanos''documents''Visual Studio 2013''项目''控制台应用程序6''控制台应用程序6''bin''调试''控制台应用程序6.exe'. 已加载符号。线程0x1480已退出,代码为 259 (0x103(。 线程0x1498已退出,代码为 259 (0x103(。

由于我真的是Visual Studio和C#的新手,如果有人可以向我展示错误或向我解释问题所在,我将不胜感激。

如何声明和使用读/写属性

属性Valset始终将属性设置为相同的值。相反,它最有可能将属性设置为用户输入的值:

set { val = value; }

或者,如果意图是使值始终为 3.14(即只读(,则可以删除 setter,get 将返回值:

class Takis
{
    public double Val
    {
        get { return 3.14; }
    }
    public Takis()
    {    
    }
}

Val 属性中的集合应该是 val = 值; value C# 中是一个关键字,是使用实例化为属性分配的值。

您的媒体资源的行为方式与属性通常不同。当我设置像 23.4 这样的值时,我希望它能坚持下去。在你的情况下,你的班级不在乎设置了什么。当我设置某些东西时,实际上,该属性将是 3.14。

您的媒体资源应设置给定的值(在本例中为 23.4(。您可以使用 value 关键字执行此操作:

    public double Val
    {
        get
        {
            return val;
        }
        set
        {
            val = value;
        }
    }