C# 如何将适配器模式应用于集合?
考虑到下面的两个类,我怎么能 将C# 如何将适配器模式应用于集合?,c#,design-patterns,collections,.net-2.0,adapter,C#,Design Patterns,Collections,.net 2.0,Adapter,考虑到下面的两个类,我怎么能 将列表转换为 列表 编辑:这是一个虚构的例子。我想说的一点是,我不能修改Person类,当我们实例化List时,我们就会知道arbirynumber EDIT2:我知道你们中的许多人会觉得这难以置信,但这段代码将部署到Windows-Server-2000机器上,这意味着它必须与.NET 2.0一起工作。[是的-我觉得这也令人难以置信。] public class Person { private string _lastName; public s
列表
转换为
列表
编辑:这是一个虚构的例子。我想说的一点是,我不能修改Person
类,当我们实例化List
时,我们就会知道arbirynumber
EDIT2:我知道你们中的许多人会觉得这难以置信,但这段代码将部署到Windows-Server-2000机器上,这意味着它必须与.NET 2.0一起工作。[是的-我觉得这也令人难以置信。]
public class Person
{
private string _lastName;
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
private string _firstName;
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
public class Person2 : Person
{
private readonly int _arbitraryNumber;
public Person2(int arbitraryNumber)
{
_arbitraryNumber = arbitraryNumber;
}
public string FullName
{
get
{
return String.Format("{0}, {1} - {2}", LastName, FirstName, _arbitraryNumber);
}
}
}
我认为Person2需要改变才能成为一个适配器。像这样的
public class Person2
{
private readonly int _arbitraryNumber;
private readonly Person _person;
public Person2(Person person, int arbitraryNumber)
{
_arbitraryNumber = arbitraryNumber;
_person = person;
}
public string FullName
{
get
{
return String.Format("{0}, {1} - {2}", _person.LastName, _person.FirstName, _arbitraryNumber);
}
}
}
这样,集合上的适配器就更容易了
List<Person> persons = new List<Person>();
// put some people in it.
var person2s = persons.Select(p => new Person2(4, p)); // 4 chosen arbitrarily
List persons=新列表();
//放一些人进去。
var person2s=个人。选择(p=>newperson2(4,p));//4任意选择
或.NET2
List<Person2> person2s = new List<Person2>();
foreach (Person p in persons)
{
Person2 person2 = new Person2(p, 11); // 11 arbitrarily chosen by asking a kid for a number
person2s.Add(person2);
}
List person2s=new List();
foreach(个人中的p个人)
{
Person2 Person2=新的Person2(p,11);//11通过向孩子索要数字而任意选择
人员2.添加(人员2);
}
您在进行这种转换时遇到了什么问题?这似乎是一件简单的事情,所以我想知道你有什么困难。Person2应该包含Person的一个实例。也许是通过使用Person字段并在构造函数中使用Person。当从Person
创建Person2
时,您如何知道使用哪个任意数字?@Oded:您是对的。这是一个容易的问题。我应该先喝完早上的咖啡正确-但如果您相信的话-我正在使用.NET 2.0.:)+1用于正确实现适配器模式,从而使转换变得微不足道