如何将适配器模式应用于集合?

发布于 2024-10-04 21:57:27 字数 1089 浏览 0 评论 0原文

鉴于下面的两个类,我该如何 将 List 转换为 列出

编辑:这是一个捏造的例子。我想要说明的一点是,我无法修改 Person 类,并且当我们实例化 List< 时我们会知道 任意编号 /代码>。

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);
        }
    }
}

Given the two classes below, how can I
convert List<Person> to
List<Person2>?

EDIT: This is a fabricated example. The point I'm trying to make is that I can't modify the Person class, and we'll know arbitraryNumber when we instantiate List<Person2>.

EDIT2: I know that many of you will find this unbelievable, but this code will be deployed to a Windows-Server-2000 machine, which means that it must work with .NET 2.0. [Yes - I find this to be unbelievable as well.]

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);
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨落画卷 2024-10-11 21:57:27

我认为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

或者对于.NET 2

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);
}

I think Person2 needs to change to be an adapter. Something like this

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);
        }
    }
}

Then the adapter on the collection is easier.

List<Person> persons = new List<Person>();
// put some people in it.
var person2s = persons.Select(p => new Person2(4, p)); // 4 chosen arbitrarily

Or for .NET 2

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文