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

时间:2014-12-16 20:58:34

标签: c# properties read-write

我刚开始学习C#并在以下代码的具体测试答案中提到:

  

Tak 的设置属性缺失或不正确。

代码由2个类组成。

使用main的第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:   ConsoleApplication6.vshost.exe):已加载   ' C:\的Windows \ Microsoft.Net \组件\ GAC_32 \ System.Data \ v4.0_4.0.0.0__b77a5c561934e089 \ System.Data.dll中&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。 ' ConsoleApplication6.vshost.exe' (CLR   v4.0.30319:ConsoleApplication6.vshost.exe):已加载   ' C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \的System.Xml \ v4.0_4.0.0.0__b77a5c561934e089 \ system.xml.dll的&#39 ;.   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。线程0x1610已退出代码259   (0x103)。线程0x1638已退出,代码为0(0x0)。线程   0x13f4已退出代码259(0x103)。   ' ConsoleApplication6.vshost.exe' (CLR v4.0.30319:   ConsoleApplication6.vshost.exe):已加载   ' c:\ users \ stefanos \ documents \ visual studio   2013 \项目\ ConsoleApplication6 \ ConsoleApplication6 \ BIN \调试\ ConsoleApplication6.exe&#39 ;.   符号已加载。线程0x1480已退出,代码为259(0x103)。   线程0x1498已退出,代码为259(0x103)。

由于我对Visual Studio和C#都很陌生,如果有人能告诉我错误或向我解释有什么问题,我会很感激。

3 个答案:

答案 0 :(得分:4)

属性set的{​​{1}}始终将属性设置为相同的值。相反,它应该很可能将属性设置为用户输入的值:

Val

或者,如果意图是始终的值为3.14(即只读),则可以删除setter并获取将返回值:

set { val = value; }

答案 1 :(得分:0)

Val属性中的set应为val = value; C#中的value是关键字,是通过实例化分配属性的值。

答案 2 :(得分:0)

您的属性的行为与通常的属性不同。当我设置像23.4这样的值时,我希望能够坚持下去。在您的情况下,您的班级不关心 I 设置的内容。当我设置了什么,真的,属性将是3.14。

您的属性应设置给定的值(在本例中为23.4)。您可以使用value关键字

来执行此操作
    public double Val
    {
        get
        {
            return val;
        }

        set
        {
            val = value;
        }
    }