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