Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#根据其他属性值自动指定属性_C#_C# 4.0 - Fatal编程技术网

C#根据其他属性值自动指定属性

C#根据其他属性值自动指定属性,c#,c#-4.0,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被指定时,或者

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

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

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

我在想,当我可以将另一个类型强制转换为某个类型时,这是可能的,但我不能实现隐式运算符,我可以将这个转换逻辑“从A+B转换为C”,因为编译器不允许对相关类型使用隐式运算符


现在我看到的唯一方法是删除继承并为另一个类型到某个类型的转换实现隐式运算符,但在这种情况下,我需要在另一个类型中复制SomeType的所有属性,并且每次更改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);
        }
    }
}

据我所知,您必须使用以下bog标准属性(如果您只知道自动属性)


你想设置C,还是直接得到它?如果您不需要设置值,那么我认为您需要:

public class MyClass
{
    private string _a = "not set";
    private string _b = "not set";

    public string A
    {
        get { return _a; }
        set { _a = value; }
    }

    public string B
    {
        get { return _b; }
        set { _b = value; }
    }

    public string C
    {
        get
        {
            if (_a != "not set" && _b != "not set")
                return "not set";
            else
                return "set";
        }
    }
}
下面是一个访问依赖于另一个属性的属性的简单示例:

public class MyClass
{
    private double[] MyArray = new double[5];

    public int NumElements
    {
        get
        {
            return MyArray.Length;
        }
    }
}

我有继承权我不能修改属性你不是在修改属性的名称或类型,只是修改它们的getter和setter的实现,它们不应该破坏你的继承。@bigb:我对你的评论感到困惑。你是说A&B,可能还有C,是你继承的类中的自动属性,不能修改吗?只有当属性是虚拟的(当然不是默认的)时才是这样。我不能使用标准properties@bigb,自动实现的属性是标准属性。它们只是被编译成标准属性的语法糖,所以是的,你可以使用标准属性,你已经这样做了。C可以保持自动,A&B似乎在您的控制下,可以是更新C的标准属性。但是,您不能用自动属性来完成。谢谢。我只需要“获取”变量,对我来说,将这种逻辑放在自动更改的变量上总是有意义的,因为理论上,在MyArray是从数据库填充的列表的情况下,影响属性(
A
B
)可能会影响许多其他变量。我们如何保证在填充MyArray后计算Numements?是否基于属性列出的顺序?
public class MyClass
{
    private double[] MyArray = new double[5];

    public int NumElements
    {
        get
        {
            return MyArray.Length;
        }
    }
}