【问题标题】:Is this a correct class implementation and initialization? [closed]这是一个正确的类实现和初始化吗? [关闭]
【发布时间】:2013-10-22 01:09:06
【问题描述】:

我发现我的编码实践最近在滑倒 - 并注意到自己陷入了一些坏习惯 - 通常是由于我缺乏动力(可能是由于为我设置的任务的空洞性质造成的) - 所以让自己振作起来,我决定自己写,这应该是一个非常简单的基础课程。这里是:

public class Customer
{       
    public string CUSTOMERNAME;
    public List<Site> sites = new List<Site>();

    public Customer()
    {

    }

    public void AddSite(Site location)
    {
        sites.Add(location);
    }

}

public class Site
{
        public string SITENAME;
        public Address SITEADDRESSDETAILS;
        public string SITEPHONENUMBER;

        public Site(string sitename, Address siteaddress, string tel)
        {
            SITENAME = sitename;
            SITEADDRESSDETAILS = siteaddress;
            SITEPHONENUMBER = tel;
        }

}

public class Address 
{
    public List<string> address = new List<string>();

    public Address() {

    }

    public void AddAddressDetail(string line)
    {
        address.Add(line);
    }

}

现在似乎一切正常,但我不禁觉得事情可以做得更好。我已经用以下代码对其进行了测试:

static void Main(string[] args)
{
    Customer customer = new Customer();
    customer.CUSTOMERNAME = "Max Hammer Ltd";

    Address addy = new Address();
    addy.AddAddressDetail("1 Edgerail Close");
    addy.AddAddressDetail("Greenbushes");
    addy.AddAddressDetail("Bluehill");
    addy.AddAddressDetail("Surrey");
    addy.AddAddressDetail("RH0 6LD");

    Site surreyOffice = new Site("Surrey Office", addy, "01737 000000");

    addy = new Address();
    addy.AddAddressDetail("6 Electric Avenue");
    addy.AddAddressDetail("Brixton");
    addy.AddAddressDetail("London");
    addy.AddAddressDetail("SW4 1BX");

    Site brixtonOffice = new Site("Brixton Office", addy, "020 7101 3333");

    customer.AddSite(surreyOffice);
    customer.AddSite(brixtonOffice);

    Console.WriteLine(customer.CUSTOMERNAME);
    int numberOfSutes = customer.sites.Count;
    for (int i = 0; i < numberOfSutes; i++)
    {
        Console.WriteLine(customer.sites[i].SITENAME);
        foreach (string line in customer.sites[i].SITEADDRESSDETAILS.address)
        {
            Console.WriteLine(line);
        }
        Console.WriteLine(customer.sites[i].SITEPHONENUMBER);
    }
    Console.ReadKey();

}

我对我的Main 课程不满意,我不知道为什么——尽管它可以满足我的要求。有什么提示、指点吗?

【问题讨论】:

  • 首先我建议不要使用所有大写变量名
  • public string CUSTOMERNAME; 你应该停在那里。
  • 对于初学者,请使用一些常见的编程实践,例如私有字段的小写。你可以在这里阅读它们msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx
  • @nuke 这无益且不具建设性。如果您缺乏提供实际可用反馈的动力,StackOverflow 可能不适合您。

标签: c# class refresher


【解决方案1】:

这是我的看法:

  • 使用适当大小写的属性。
  • 为什么要在地址中列出行?! [已移除]。
  • 直接访问列表。

public class Customer
{
    public string Name {get; set;}
    public List<Site> Sites { get; set; }

    public Customer()
    {
        Sites = new List<Site>();
    }
}

public class Site
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string PhoneNumber { get; set; }

    public Site(string sitename, string siteaddress, string tel)
    {
        Name = sitename;
        Adress = siteaddress;
        PhoneNumber = tel;
    }

}

public class Program
{
    static void Main(string[] args)
    {

        Customer customer = new Customer();
        customer.Name = "Max Hammer Ltd";

        string address = string.Join(Environment.NewLine, new []{"1 Edgerail Close", "Greenbushes", "Bluehill"
             , "Surrey", "RH0 6LD"});

        Site surreyOffice = new Site("Surrey Office", address, "01737 000000");

        address = string.Join(Environment.NewLine, new[]{"1 Edgerail Close", "Greenbushes", "Bluehill"
                , "Surrey", "RH0 6LD"});

        Site brixtonOffice = new Site("Brixton Office", address, "020 7101 3333");

        customer.Sites.Add(surreyOffice);
        customer.Sites.Add(brixtonOffice);

        Console.WriteLine(customer.Name);
        foreach (Site site in customer.Sites)
        {
            Console.WriteLine(site.Name);
            Console.WriteLine(site.Adress);
            Console.WriteLine(site.PhoneNumber);
            Console.WriteLine();
        }
        Console.ReadKey();

    }
}

【讨论】:

  • 如果地址行中有逗号怎么办?我总是使用列表数据结构来存储列表,而不是来回解析某种分隔字符串。
  • 谢谢艾哈迈德,您的示例向我展示了我让不良做法出现的确切位置 - 并让我直截了当。再次,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多