c# Как назначить объекту его тип глобально?

Есть 4 объекта

public object ObjectGet = { get; set; }
public Object1TType Object1 = new Object1TType();
public Object2TType Object2 = new Object2TType();
public object Object3Set = new();
...
if ... => ObjectGet = new Object1TType(...)
else => ObjectGet = new Object2TType(...)

Я знаю что можно завести Object3Set в самом коде:

if (ObjectGet is Object1TType)
{
    Object3Set = ObjectGet as Object1TType;
}
else if (ObjectGet is Object2TType)
{
    Object3Set = ObjectGet as Object2TType;
}

А как изменить тип объекта object Object3Set на Object1TType или Object2TType в зависимости от типа объекта глобально, чтобы можно было обращаться к Object3Set.Field (при условии того, что я знаю что в данном месте это 100% например Object1TType) без надобности заведения Object3Set локально?

Пример рабочего кода: 1.cs

namespace ObjectType
{
    public class Object1TType : ICloneable
    {
        public ulong Field { get; set; }
        public Object1TType()
        {
        }

        public Object1TType( ulong Field)
        {
            this.Field = Field;
        }
        public object Clone()
        {
            return new Object1TType(Field);
        }
    }

    public class Object2TType : ICloneable
    {
        public ulong Field { get; set; }
        public Object2TType()
        {
        }

        public Object2TType(ulong Field)
        {
            this.Field = Field;
        }
        public object Clone()
        {
            return new Object2TType(Field);
        }
    }

    public class Class1
    {
        public static object ObjectGet = new Object1TType();

        public static void Do()
        {
            ulong test = 123;
                ObjectGet = new Object2TType(test);
        }
    }
}

2.cs

namespace Code
{
    public class Main
    {
        public object ObjectGet = ObjectType.Class1.ObjectGet;
        public object Object3Set = new();

        public void Do()
        {
            ObjectType.Class1.Do();
            if (ObjectGet is ObjectType.Object1TType)
            {
                Object3Set = ObjectGet as ObjectType.Object1TType;
            }
            else if (ObjectGet is ObjectType.Object2TType)
            {
                Object3Set = ObjectGet as ObjectType.Object2TType;
            }

            Console.WriteLine(Object3Set.Field);
        }
    }
}

тут я не могу обращаться к ObjectGet.Field и к Object3Set.Field, для этого я думаю нужно что-то сделать с Object3Set и работать с ним


Ответы (1 шт):

Автор решения: User
public interface IObjectTType
{
    UInt64 Field { get; set; }
}
public class Object1TType : ICloneable, IObjectTType
{
    public UInt64 Field { get; set; }
}
public class Object2TType : ICloneable, IObjectTType
{
    public ulong Field { get; set; }
}
public class Class1
{
    public static IObjectTType ObjectGet = new Object1TType();
}
public class Main
{
    public IObjectTType ObjectGet = ObjectType.Class1.ObjectGet;
    public object Object3Set = new();

    public void Do()
    {
          
        ObjectType.Class1.Do();
        Console.WriteLine(ObjectGet.Field);
    }
}

Можно использовать интерфейсы/абстрактные классы/наследования классов для реализации общего функционала ваших объектов.

Object3Set - никак не задействована, зачем она...

p.s. пространство имён ObjectType совпадает с название класса Microsoft.VisualBasic.CompilerServices.ObjectType избегайте таких совпадений дабы избежать путаницы с IDE.

→ Ссылка