C# 根据其他属性值自动分配属性

标签 c# c#-4.0

如果我有一些类型,例如:

public class SomeType //Generated by some codegen i won't to change that.
{
    string C { get; set; }        
}

public class AnotherType : SomeType
{
    string A { get; set; }
    string B { get; set; }
}

是否可以自动分配属性 C?例如,当属性 A 和 B 被分配时,或者当我将这种类型转换为另一种类型时,或者以其他方式?

基本上,例如,当属性值 A 和 B 被填充时,我想执行一些逻辑以根据值 A 和 B 自动分配属性 C。

除了使用标准属性之外,还有其他方法吗?

我在想,当我可以将类型 AnotherType 转换为 SomeType 时,可以做一些魔术之王,但我无法实现隐式运算符,因为编译器不会将此转换逻辑“从 A+B 到 C”不允许相关类型的隐式运算符。

现在我看到的唯一方法是删除继承并为 AnotherType 到 SomeType 的转换实现隐式运算符,但在这种情况下,我需要复制 AnotherType 类型中 SomeType 类型的所有属性,并且每次都需要手动更改 AnotherType 类型当 SomeType 发生变化时。

最佳答案

这可以使用自动实现的属性。您可以使用 B 的 setter 为 C 赋值:

public class SomeType
{
    public string A { get; set; }
    public string C { get; set; }

    private string _b;
    public string B 
    { 
        get { return _b; } 
        set 
        { 
            // Set B to some new value
            _b = value; 

            // Assign C
            C = string.Format("B has been set to {0}", value);
        }
    }
}

关于C# 根据其他属性值自动分配属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3594091/

相关文章:

c# - 使用 LINQ 将缺失的项目添加到集合中

c# - 我如何在 C# 中调用 getter 或 setter

c# - 使用 DirectorySearcher 从大型 AD 组获取 SamAccountName

c# - 与列表进行快速字符串比较

c# - 提交表单导致 URL 中出现未知代码

c# - ToArrayAsync() 抛出 "The source IQueryable doesn' t 实现 IAsyncEnumerable"

visual-studio-2010 - 有没有办法控制包含加载项的左侧任务 Pane 的宽度?

web-services - 无法识别意外以 '/$metadata' 结尾的 URL 的请求格式

c# - 为多个实例构建 C# 控制台应用程序

c# - 拉丁语的 CultureInfo