显示get set属性的访问信息

时间:2017-11-09 07:52:27

标签: c#

当我在控制台上输出以下代码时,我会得到"年龄错误"一行后跟一个' 0' (当我输入狗的年龄为-10时)。我只想表现出“年龄错误”#39;线。

Program Class

class Program
{
    static void Main()
    {
        Animal dog = new Animal();
        dog.Age = -10;
        Console.WriteLine(dog.Age);
    }
}

Animal Class

class Animal
{
    private int age;
    private string color;
    public int Age
    {
        get
        {
            return age;
        }
        set
        {
            if (value < 0)
            {
                Console.WriteLine("Age is wrong");
            }
            else
            {
                age = value;
            }
         }
    }
}

3 个答案:

答案 0 :(得分:1)

只有在不是零的情况下记录年龄是你想要的,这就是你应该做的:

if(dog.Age != 0)
{
     Console.WriteLine(dog.Age);
}

答案 1 :(得分:1)

您的Program班级不知道如何检测年龄错误 - 所以它只输出当前年龄值(0)。

你可以有一个返回布尔值的方法,指示设置年龄是否成功:

public int Age { get { return age; } } // no setter

public bool SetAge(int newAge)
{
    if (newAge < 0) 
    {
        Console.WriteLine("Wrong age: " + newAge);
        return false;
    }

    age = newAge;
    return true;
}
....
if (dog.SetAge(-10))
{
    Console.WriteLine("Age successfully set to " + dog.Age);
}

或者您可以依赖异常处理:

public int Age
{
    get { return age; }
    set
    {
        if (value < 0) throw new Exception("Invalid age: " + value);
        age = value;
    }
}
...
try
{
    dog.Age = -10;
    Console.WriteLine(dog.Age);
}
catch (Exception ex)
{
    Console.WriteLine("Error setting age: " + ex.Message);
}

答案 2 :(得分:0)

由于您已经在属性的setter中写入控制台,因此您只需将所有写入移动到setter块中即可。例如:

class Program
{
    static void Main()
    {
        Animal dog = new Animal();
        dog.Age = -10;
    }
}

class Animal
{
    private int age;
    private string color;
    public int Age
    {
        get
        {
            return age;
        }
        set
        {
            if (value < 0)
            {
                Console.WriteLine("Age is wrong");
            }
            else
            {
                age = value;
                Console.WriteLine(age);
            }
         }
    }
}