c# - 从方法中分配属性

标签 c#

我有两个类,像这样的基类和继承类

public class A
{
     public string Prop1 { get; set; }
} 

public class B : A
{
     public string Prop2 { get; set; }
} 

现在我有一个在填充属性值后返回类 A 的方法

public A GetPopulatedValues()
{
     //code to populate values here
}

现在我的问题是,如何一次分配所有属性值?

这行得通

public void Init()
{
   var obj = new B();
   obj.Prop1 = GetPopulatedValues().Prop1;
}

但是我想要这样的东西

  public void Init()
{
   var obj = new B();
   obj = GetPopulatedValues();
}

有什么想法吗?

最佳答案

创建构造函数:

public Foo(string prop1, string prop2)
{
    Prop1 = prop1;
    Prop2 = prop2;
}

或者复制构造函数:

public Foo(Foo other)
{
    Prop1 = other.Prop1;
    Prop2 = other.Prop2;
}

或者使用一个对象初始化器:

var foo = new Foo { Prop1 = "Hello", Prop2 = "World" };

但正如@RudiVisser 所说,您实际上需要在 GetPopulatedValues() 方法中解决此问题,方法是提供对您要填充的对象的引用:

static class FooPopulator
{
    public static void PopulateValues(Foo foo)
    {
        foo.Prop1 = "Hello";
        foo.Prop2 = "World";
    }
}

var foo = new Foo();
FooPopulator.PopulateValues(foo);

现在您的 foo 对象可用且可填充,无需更改 Foo 类。额外的好处:当您添加要填充的属性时(比如 Prop3),您只需更改 PopulateValues() 方法。

在您的代码中,您也必须这样做,但是您还需要添加 Prop3 赋值,如果忘记,将导致错误。

关于c# - 从方法中分配属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15201400/

相关文章:

c# - 实现接口(interface)但将成员更改为私有(private)

c# - 打开 SQL 连接时拒绝访问

c# - 间歇性 401-SSRS 未经授权的响应

c# - Elasticsearch.NET 版本 7 - 如何创建索引

c# - 用于删除旧文件的 Powershell 脚本

c# - 创建自定义 JsonConverter 来处理 System.Text.Encoding 对象

c# - 我可以通过编程方式控制 .NET Core 程序集重定向吗?

c# - Type.GetType ("System.Net.WebException")返回 null

c# - 将 XML 转换为格式化文本小瓶 XSLT

c# - 释放锁时出现 SynchronizationLockException(从未同步的代码块调用了对象同步方法。)