A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在构造方法中,有些参数是只读属性,只层在最初赋值,但是在最初赋值的时候如何进行保护?比如下面的构造方法中name是只读属性,在对它进行赋初值的时候,如果赋的是数字或特殊符号,怎么报错.
class Student
    {
        public Student(string name)
        {
            this.name = name;
        }
        string name;
        public string Name
        {
            get { return name; }
        }
    }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

8 个回复

倒序浏览
哎呀 这个似乎我也不知道也 但是我知道肯定是在return中写判断语句  就是不知道该怎么写  我也想知道!!嘿嘿

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你可以将要只读属性直接在定义为私有的,不传递给构造函数,然后提供共有的方法给外部访问,或者可以在构造函数中将只读属性写定,同样提供共有方法来是外部访问。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
public Student(string name)这里的参数就是string,如果传过来的参数不是string类型的话,你的语句在编译的时候就应该出错了吧。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
在保证你在构造函数中穿的参数是string的话,参数里包含数字和特殊字符不会出错。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Student
{
    class Student
    {
        public Student(string name)
        {
            this.name = name;
        }
        string name;
        public string Name
        {
            get { return name; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student("12@$&");
            Console.WriteLine(stu.Name);
            Console.ReadKey();
        }
    }
}
能正确运行

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
这个问题你问题太基础了吧、你在构造函数中接收到的值我们可以在构造函数中判断晒、满足你的要求的时候我们才对保护的属性赋值、不满足的值直接抛出异常就OK了,在set中也可以判断的、
例如:
class Student
    {
        public Student(string name)
        {
            if(name=="12")
            {
                  //程序抛出异常就不会往下执行了
                  thorw new Exception("请输入正确的姓名");
            }
            
            this.name = name;
        }
        string name;
        public string Name
        {
            get { return name; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student("12");
            Console.WriteLine(stu.Name);
            Console.ReadKey();
        }
    }

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
在构造函数内用if进行判断或者用正则表达式进行匹配。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
在 Student 类的构造函数中加 if 语句判断 name 赋的是数字或特殊符号时给予提示重新输入 name ,使用正则表达式\d{9}来判断字符串中是否有数字代码如下:
class Student
    {
        public Student(string name)
        {
                       Regex   r   =   new   Regex(@ "\d{9} ");   //使用正则表达式\d{9}来判断字符串中是否有数字
                        Match   m;
                        m   =   r.Match(name);
                        if   (m.Success)   //如果赋的是数字或特殊符号就结束
                              return;                 
                       this.name = name;
        }
        string name;
        public string Name
        {
            get { return name; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student("12");
            Console.WriteLine(stu.Name);
            Console.ReadKey();
        }
    }

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
        public Student(string name)
         {
             if(name=="12")
             {
                   //程序抛出异常就不会往下执行了
                   thorw new Exception("请输入正确的姓名");
             }
            
             this.name = name;
正则表达式 似乎我好想不是很清楚也 但是 throw new exception(“??”) 这个我是知道一  点  但是  name = “12”  这个是什么意思呢? 还请解释一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马