检查以确保我的对象未部分初始化

时间:2012-11-29 04:45:25

标签: c#

我正在创建一个简单的应用程序,它接受一个URL和一个String,并为超链接创建代码。

这是我的HyperLink类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

 namespace LinkIt_
{
class HyperLink
{
    private string url;
    private string text;

    public HyperLink()
    {

    }

    public HyperLink(string url,string text)
    {
        this.Website = url;
        this.Text = text;
    }


    public String Website
    {
        get
        {
            return url;
        }
        set
        {
            if (String.IsNullOrEmpty(value))
            {
                throw new ArgumentNullException("Must have URL!");
            }

            this.url = value;
        }


    }

    public String Text
    {

        get
        {
            return text;
        }

        set
        {
            if (String.IsNullOrEmpty(value))
            {
                throw new ArgumentNullException("Must have Text!");
            }
            this.text = value;
        }



    }

    public string addPoint()
    {

        return String.Format("<li><a href=" + "\" {0} \">", url) + text + "</a></li>";  
    }

    public override string ToString()
    {

        return String.Format("<a href=" + "\" {0} \">",url) + text + "</a>" ;   
    }



           }
       }

这是我的表格类

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

 namespace LinkIt_
 {
        public partial class Form1 : Form
{


    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        HyperLink link;
            try
            {

                if (chkPoint.Checked)
                {

                    txtDisplay.Text = "";
                    link = new HyperLink(txtLink.Text, txtText.Text);
                    txtDisplay.Text = link.addPoint();


                }
                else
                {
                    txtDisplay.Text = "";
                    link = new HyperLink(txtLink.Text, txtText.Text);
                    txtDisplay.Text = link.ToString();

                }



            }


            catch (ArgumentNullException msg)
            {
                MessageBox.Show(msg.Message);
            }





   }




    private void btnClear_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = "";
        txtLink.Text = "";
        txtText.Text = "";
    }
}
 }

我的问题:

  1. 如何确保我不创建部分初始化的对象?

  2. 如果我的代码需要更正,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您可以重构代码以使用具有降低的访问者可见性的属性。 这样就无法在类外部更改HyperLink对象(这通常是数据结构的首选属性)。

例如,您可以这样做:

class HyperLink
{
    public String Website{get; private set;}

    public String Text {get; private set;}

    public HyperLink(string url,string text)
    {
        if(string.isNullOrEmpty(url) || string.IsNullOrEmpty(text))
          throw new ArgumentNullException("no partially intialized object allowed");

        this.Website = url;
        this.Text = text;
    }

    public string AddPoint()
    {
        return String.Format("<li><a href=" + "\" {0} \">", url) + text + "</a></li>";  
    }

    public override string ToString()
    {
        return String.Format("<a href=" + "\" {0} \">",url) + text + "</a>" ;   
    }
}

更新以回复评论中的问题

是的,在同一个对象或类中使用Getter / Setter是完全合理的。 不过,我建议您将String.Format的使用情况改进为以下内容:

String.Format("<a href=\"{0}\">{1}</a>",this.Link, this.Text);