C# 在使用隐式转换转换转换为对象设置新值时,如何保留旧类的成员?

C# 在使用隐式转换转换转换为对象设置新值时,如何保留旧类的成员?,c#,C#,我知道有些人会建议其他方法来执行同样的功能,我只对具体实现我的目标感兴趣。我已经有了执行上述任务的工作代码,只是想了解更多关于编写我自己的强大对象的信息——谢谢 我的目标是: int x = 100; Base b = new Base(0, 3); b = x; // Preserves my baseNum of 3 for conversions 代码: 我已经排除了很多不相关的代码。此对象持有一个数值,但提供对转换格式的逐位引用(当我们以10为基数计算时,此对象将转换为其他基本形式)

我知道有些人会建议其他方法来执行同样的功能,我只对具体实现我的目标感兴趣。我已经有了执行上述任务的工作代码,只是想了解更多关于编写我自己的强大对象的信息——谢谢

我的目标是:

int x = 100;
Base b = new Base(0, 3);
b = x; // Preserves my baseNum of 3 for conversions
代码:

我已经排除了很多不相关的代码。此对象持有一个数值,但提供对转换格式的逐位引用(当我们以10为基数计算时,此对象将转换为其他基本形式)

我希望保留当前的baseNum成员,并且在使用赋值时只更新对象的数值

因为隐式转换是一个静态函数,据我所知,在int被强制转换到我的对象中之后执行赋值时,无法访问将使用的实例

是否有任何方法可以按我希望的方式执行此分配操作

同样,我已经有很多方法可以修改实例的数值成员

我还知道,我可以在赋值后简单地再次定义baseNum


我只想知道是否有办法以我想象的方式利用我的物体。

你不能这么做

当你写
b=x
时,引擎盖下面发生的事情是:

  • 如果
    x
  • x
    的值上调用
    implicit operator Base(int i)
    ,将返回一个
    Base
    对象
  • 将返回的对象分配给
    b

  • 在进行转换的第2步中,没有常规方法可以访问
    b
    的原始值。

    您不能这样做

    当你写
    b=x
    时,引擎盖下面发生的事情是:

  • 如果
    x
  • x
    的值上调用
    implicit operator Base(int i)
    ,将返回一个
    Base
    对象
  • 将返回的对象分配给
    b
  • 在进行转换的步骤2中,没有常规方法可以访问
    b
    的原始值

    是否有任何方法可以按我希望的方式执行此分配操作

    不,没有。隐式或显式转换运算符始终返回新对象。对于引用类型,返回的值是一个引用,赋值给保存该引用的变量,该变量不会以任何方式修改该变量之前引用的对象

    此外,我建议你无论如何都不要这样做。只部分修改目标的赋值对于任何阅读代码的人来说都是非常混乱的。起初,可能只是让不熟悉设计的人感到困惑,但最终,一旦代码在那里停留了一段时间而不需要进行任何工作,即使理论上精通设计的人也会很难记住它是这样做的

    坚持您已经拥有的,即明确表示对对象单个组件的修改。这将保持代码的表达性、简单性和易懂性

    是否有任何方法可以按我希望的方式执行此分配操作

    不,没有。隐式或显式转换运算符始终返回新对象。对于引用类型,返回的值是一个引用,赋值给保存该引用的变量,该变量不会以任何方式修改该变量之前引用的对象

    此外,我建议你无论如何都不要这样做。只部分修改目标的赋值对于任何阅读代码的人来说都是非常混乱的。起初,可能只是让不熟悉设计的人感到困惑,但最终,一旦代码在那里停留了一段时间而不需要进行任何工作,即使理论上精通设计的人也会很难记住它是这样做的


    坚持您已经拥有的,即明确表示对对象单个组件的修改。这将保持代码的表达性、简单性和易懂性。

    您不能保留任何数据,因为您没有使用
    Base
    实例。创建一个Clone()方法。您不能保留任何数据,因为您没有使用
    Base
    实例。创建一个Clone()方法。谢谢。这正是我的恐惧。我将使用我为数字成员定制的集合方法。谢谢。这正是我的恐惧。我将使用我为数字成员定制的集合方法。这是真的。我认为它可能很聪明,实际上降低了复杂性,但你是对的——大多数人不会认为这就是我的对象的工作方式,尤其是在代码熟悉度随着时间的推移而降低之后。我将回到我的集合中,获取公共变量的方法。这是真的。我认为它可能很聪明,实际上降低了复杂性,但你是对的——大多数人不会认为这就是我的对象的工作方式,尤其是在代码熟悉度随着时间的推移而降低之后。我将回到我的集合中,获取公共变量的方法。
    public class Base
    {
        public int count = 0; // represents the count of current numerical value in base ten digit count : 3 -> could be read NEVER user changed
        public int baseNum = 10; // conversion base subscript -> """""
        public int represented; // represented base ten value of conversion (used for output NOT mathmatically friendly) -> should be read BUT never change by user
        public int numerical = 0;
    
        public int[] basearray; // should NOT be modified read only 
    
        public Base()
        {
            //count = 0; // setting numerical will run digit count
            baseNum = 10;
            numerical = 0;
        }
    
        public Base(int i)
        {
            baseNum = 10;
            numerical = i;
        }
    
        public Base(int n, int b)
        {
            baseNum = b;
            numerical = n;
        }
    
        public static implicit operator Base(int i)
        {
            // Help needed
        }
    
        public static implicit operator int(Base b)
        {
            int i = b.numerical;
            return i;
        }
    
    }