none
n个不同数量成员,但相同的成员名有相同的类型,它们互相能够相互赋值吗? RRS feed

  • 问题

  • 如果我新建n个类或结构,想让他们的实例可以互相赋值。

    struct A
    {
    public int a1;
    public char a2;
    public datetime a3;
    }
    
    class B
    {
    public int a1;
    public char a2;
    public datetime a3;
    }
    
    ..................................................
    
    {
    A S_A=new A();
    B S_B=new B();
    
    S_A.a1=0;
    S_A.a2='c';
    S_A.a3=convert.todatetime("2011-06-24");
    
    S_B=S_A; //这样可以把 S_A的各值赋值到S_B吗?
    }
    
    如果,其它同上,但:
    class B
    {
    public int a1;
    public char a2;
    public datetime a3;
    public string a4;
    }
    那么:
    S_B=S_A; //能赋值吗?
    
    如果不能,我该怎么做?
    
    

     

    2011年6月25日 3:25

答案

  • 如果我新建n个类或结构,想让他们的实例可以互相赋值。

    struct A
    {
    public int a1;
    public char a2;
    public datetime a3;
    }
    
    class B
    {
    public int a1;
    public char a2;
    public datetime a3;
    }
    
    ..................................................
    
    {
    A S_A=new A();
    B S_B=new B();
    
    S_A.a1=0;
    S_A.a2='c';
    S_A.a3=convert.todatetime("2011-06-24");
    
    S_B=S_A; //这样可以把 S_A的各值赋值到S_B吗?
    }
    
    如果,其它同上,但:
    class B
    {
    public int a1;
    public char a2;
    public datetime a3;
    public string a4;
    }
    那么:
    S_B=S_A; //能赋值吗?
    
    如果不能,我该怎么做?
    
    

     


    当然不能,因为类之间如果没有任何关系,那么直接赋值肯定是出错的。如果你要赋值,那么除非你使用“隐式转换”——

    namespace TestConsoleApplication1
    {
        struct A
        {
            public int a1;
            public char a2;
            public DateTime a3;

         
        }

        class B
        {
            public int a1;
            public char a2;
            public DateTime a3;

            public static implicit operator B(A a)
            {
                B b = new B();
                b.a1 = a.a1;
                b.a2 = a.a2;
                b.a3 = a.a3;
                return b;
            }
        }

     

        class Program
        {
            static void Main(string[] args)
            {
                A S_A = new A();
                B S_B = new B();

                S_A.a1 = 0;
                S_A.a2 = 'c';
                S_A.a3 = DateTime.Now;

                S_B = S_A;

            }

        }

    }


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 OpenNovo 2011年6月27日 6:31
    2011年6月25日 11:54
    版主
  • 如果我转回来,S_A=S_B,是否在A中也要增加这样的隐式转换?

    当然!你可以尝试做做看呢!
    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 OpenNovo 2011年6月27日 6:31
    2011年6月26日 7:51
    版主
  • 抱歉,我也想尝试做做看,但我一般没构思好之前,很少动手。我怕逻辑不到位,反而不知如何下去。

    struct A
         {
             public int a1;
             public char a2;
             public DateTime a3;
     
             public static implicit operator A(B b)
     {
                 A a = new A();
                 a.a1 = b.a1;
                 a.a2 = b.a2;
                 a.a3 = b.a3;
                 return a;
     
     }
        }

    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 OpenNovo 2011年6月27日 6:31
    2011年6月27日 3:04
    版主

全部回复

  • 如果我新建n个类或结构,想让他们的实例可以互相赋值。

    struct A
    {
    public int a1;
    public char a2;
    public datetime a3;
    }
    
    class B
    {
    public int a1;
    public char a2;
    public datetime a3;
    }
    
    ..................................................
    
    {
    A S_A=new A();
    B S_B=new B();
    
    S_A.a1=0;
    S_A.a2='c';
    S_A.a3=convert.todatetime("2011-06-24");
    
    S_B=S_A; //这样可以把 S_A的各值赋值到S_B吗?
    }
    
    如果,其它同上,但:
    class B
    {
    public int a1;
    public char a2;
    public datetime a3;
    public string a4;
    }
    那么:
    S_B=S_A; //能赋值吗?
    
    如果不能,我该怎么做?
    
    

     


    当然不能,因为类之间如果没有任何关系,那么直接赋值肯定是出错的。如果你要赋值,那么除非你使用“隐式转换”——

    namespace TestConsoleApplication1
    {
        struct A
        {
            public int a1;
            public char a2;
            public DateTime a3;

         
        }

        class B
        {
            public int a1;
            public char a2;
            public DateTime a3;

            public static implicit operator B(A a)
            {
                B b = new B();
                b.a1 = a.a1;
                b.a2 = a.a2;
                b.a3 = a.a3;
                return b;
            }
        }

     

        class Program
        {
            static void Main(string[] args)
            {
                A S_A = new A();
                B S_B = new B();

                S_A.a1 = 0;
                S_A.a2 = 'c';
                S_A.a3 = DateTime.Now;

                S_B = S_A;

            }

        }

    }


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 OpenNovo 2011年6月27日 6:31
    2011年6月25日 11:54
    版主
  • 如果我转回来,S_A=S_B,是否在A中也要增加这样的隐式转换?
    2011年6月26日 6:56
  • 如果我转回来,S_A=S_B,是否在A中也要增加这样的隐式转换?

    当然!你可以尝试做做看呢!
    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 OpenNovo 2011年6月27日 6:31
    2011年6月26日 7:51
    版主
  • 如果我转回来,S_A=S_B,是否在A中也要增加这样的隐式转换?

    当然!你可以尝试做做看呢!
    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    抱歉,我也想尝试做做看,但我一般没构思好之前,很少动手。我怕逻辑不到位,反而不知如何下去。
    2011年6月26日 12:35
  • 抱歉,我也想尝试做做看,但我一般没构思好之前,很少动手。我怕逻辑不到位,反而不知如何下去。

    struct A
         {
             public int a1;
             public char a2;
             public DateTime a3;
     
             public static implicit operator A(B b)
     {
                 A a = new A();
                 a.a1 = b.a1;
                 a.a2 = b.a2;
                 a.a3 = b.a3;
                 return a;
     
     }
        }

    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请讨论
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 OpenNovo 2011年6月27日 6:31
    2011年6月27日 3:04
    版主