Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#要列出的类=>;循环=>;打印出来_C#_List_Collections - Fatal编程技术网

C#要列出的类=>;循环=>;打印出来

C#要列出的类=>;循环=>;打印出来,c#,list,collections,C#,List,Collections,嘿,伙计们,我最近开始使用microsoft.Net教程学习C# 我被困在“类和对象”课上了。 每节课结束时,我们都有一点“家庭作业”要做。 我需要编写一个程序,使用三个不同的类(Person、Copmany、Address)打印出个人和公司的地址。我需要将它们添加到集合并循环,打印出每个公司或个人的地址 下面是(在页面的末尾,有一个程序应该是什么样子的示例) 我真的不知道我该如何做到这一点。有人能帮我理解吗。这就是我到目前为止所做的: public class Address { public

嘿,伙计们,我最近开始使用microsoft.Net教程学习C#

我被困在“类和对象”课上了。 每节课结束时,我们都有一点“家庭作业”要做。 我需要编写一个程序,使用三个不同的类(Person、Copmany、Address)打印出个人和公司的地址。我需要将它们添加到集合并循环,打印出每个公司或个人的地址

下面是(在页面的末尾,有一个程序应该是什么样子的示例)

我真的不知道我该如何做到这一点。有人能帮我理解吗。这就是我到目前为止所做的:

public class Address
{
public string StreetAddress { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }

public override string ToString()
{
    return $"{StreetAddress}, {City}, {PostalCode}, {Country}";
}
public Address()
{
    StreetAddress = "Main123";
    City = "SomeTown";
    State = "OH";
    PostalCode = "12345";
    Country = "United States";
}
}

public class Person : Master
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Address ShippingAddress { get; set; }

public Person(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
    ShippingAddress = new Address();
}
public override string ToString()
{
    return $"{FirstName} {LastName} {ShippingAddress}\n";
}
}

public class Company : Master
{
public string Name { get; set; }
public Address ShippingAddress { get; set; }

public Company(string name)
{
    Name = name;
    ShippingAddress = new Address();
}
public override string ToString()
{
    return $"{Name} {ShippingAddress}\n";
}
}


public class Master
{
public static List<Master> data = new List<Master>();
public static void Coll(Master master)
{
    data.Add(master);
    data.ForEach(Console.WriteLine);
}
}

class MainClass
{
public static void Main(string[] args)
{
    Person John = new Person("John", "Smith");
    Master.Coll(John);
}
}
公共类地址
{
公共字符串StreetAddress{get;set;}
公共字符串City{get;set;}
公共字符串状态{get;set;}
公共字符串PostalCode{get;set;}
公共字符串国家{get;set;}
公共重写字符串ToString()
{
返回$“{StreetAddress},{City},{PostalCode},{Country}”;
}
公共广播
{
StreetAddress=“Main123”;
City=“SomeTown”;
State=“OH”;
PostalCode=“12345”;
国家=“美国”;
}
}
公开课人员:硕士
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共地址ShippingAddress{get;set;}
公众人物(字符串名、字符串名)
{
名字=名字;
LastName=LastName;
ShippingAddress=新地址();
}
公共重写字符串ToString()
{
返回$“{FirstName}{LastName}{ShippingAddress}\n”;
}
}
公开课公司:硕士
{
公共字符串名称{get;set;}
公共地址ShippingAddress{get;set;}
上市公司(字符串名称)
{
名称=名称;
ShippingAddress=新地址();
}
公共重写字符串ToString()
{
返回$“{Name}{ShippingAddress}\n”;
}
}
公共班主任
{
公共静态列表数据=新列表();
公共静态void Coll(主控)
{
数据。添加(主);
data.ForEach(Console.WriteLine);
}
}
类主类
{
公共静态void Main(字符串[]args)
{
人约翰=新人(“约翰”、“史密斯”);
科尔大师(约翰);
}
}

如果您已经到了教程的结尾,那么这意味着您已经阅读了有关继承和多态性的部分。 请仔细阅读本节内容

如果您的任务是:打印每个公司或个人的地址

请看一下教程中关于
ToString
方法的内容:

请注意,您可以在任何类上重写ToString方法,在该类上显示与该类实例相关的字符串数据是有意义的

因此,第一步是通过重写
ToString
方法,赋予类
Address
显示其内容的能力

第二步是使用继承并创建一个超类,该超类可以由您的两个类
Person
Company
继承。正如教程中使用类
Shape
所做的那样

这将允许您将它们添加到[单个]集合(如您在请求中所述)

尝试结合这些步骤,如果你还有问题,请给我留言。 (请继续阅读本教程,所有必要的信息都在那里,您只需将不同的部分组合起来即可)。祝您好运

编辑:

编辑代码后,接下来的步骤是为类
Person
Company
提供显示自身信息的能力。这意味着您也应该覆盖
ToString
方法

一个提示:您可以使用类
Address
ToString
方法来显示
ShippingAddress
的详细信息。如果将变量包含在外推字符串
$“..
将隐式调用
ToString
方法并显示所有详细信息:

$"{ShippingAddress}"
Coll
方法的一个问题是,它使用局部变量
列出数据
作为存储。当编译器从方法返回时,此变量将不再存在。另一个问题是,在每次调用中,您都会创建一个新的
列表
,从而无法存储多个元素。您可以做的是使它成为
主类中的
静态
变量。因此,每次添加项目时,它都会保留在内存中,以后可以访问。 您还可以使方法
静态
,因为它实际上不需要调用
Master
类型的对象(它不访问任何类属性)


这相当直截了当。您可以使用接口或多态性来实现

您需要将对象放入集合中,并遍历所有对象

entityList = new List<IPrintable>();
foreach(var entity in entityList)
{
    entity.PrintAddress();
}
您需要在这两个类中实现这个接口

public class Person : IPrintable
{
    public void Print()
    {
        Console.WriteLine("Person's address is {0}", ShippingAddress.ToString());
    }
}

public class Company : IPrintable
{
    public void Print()
    {
        Console.WriteLine("Company's is {0}", ShippingAddress.ToString());
    }
}

public class Address
{
    public string ToString()
    {
        return string.Format(" Street: {0}, {1}, {2}, {3}, post code{4}, {5}", StreetAddress, City, State, PostalCode, Country);           
    }
}
您不需要使用公共接口,而是可以创建抽象基类,该基类将保存ShippingAddress字段,并具有虚拟方法Print(),而无需实现。然后这个基类将是您在列表类中使用的类型 var entitylist=newList()

然后您将亲自和公司继承这个类,并在具体的类中实现Print方法。 然后你可以做: entitylist.Add(新人员(…); entitylist.Add(新公司(…)

并对foreach和interface执行相同的操作

您需要调用基类构造函数

public class Person : ShippableEntity
{
     public Person(Address address)
             : base(adress)
     {
     }
}

我希望这能有所帮助。

请将代码以文本而不是图片的形式发布。在这种情况下,我更喜欢使用界面—类似IADDessable的东西,只有只读属性返回地址。我很难想象基类的一个好例子以及它对这些实体的用法。@soton你可能是对的,因为基类的一个好例子并不明显。但是接口可能在下一个教程中讨论;)我正在努力学习OP可以从giv中获得的知识
internal interface IPrintable
{
    void PrintAddress();
}
public class Person : IPrintable
{
    public void Print()
    {
        Console.WriteLine("Person's address is {0}", ShippingAddress.ToString());
    }
}

public class Company : IPrintable
{
    public void Print()
    {
        Console.WriteLine("Company's is {0}", ShippingAddress.ToString());
    }
}

public class Address
{
    public string ToString()
    {
        return string.Format(" Street: {0}, {1}, {2}, {3}, post code{4}, {5}", StreetAddress, City, State, PostalCode, Country);           
    }
}
public abstract class ShippableEntity
{
    private Address _Address;

    private ShippableEntity(Address address)
    {
        _Address = address;
    }

    public abstract void Print();

    public Address ShippingAddress { get { return _Address; } }
}
public class Person : ShippableEntity
{
     public Person(Address address)
             : base(adress)
     {
     }
}