Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# - Fatal编程技术网

C#如何通过另一个类对象访问一个类对象的值

C#如何通过另一个类对象访问一个类对象的值,c#,C#,我想通过构造函数将一个类的对象分配给另一个类,并从具有构造函数的类中检索构造函数分配的类的值。听起来很混乱,太复杂了:)。我受不了。你有什么想法吗?下面是一个示例代码 public class Class1 { public class1(int value1) { Value1 = value1; } public int Value1 { get;} } public class Class2 { public object Object1 {g

我想通过构造函数将一个类的对象分配给另一个类,并从具有构造函数的类中检索构造函数分配的类的值。听起来很混乱,太复杂了:)。我受不了。你有什么想法吗?下面是一个示例代码

public class Class1
{
   public class1(int value1)
   {
       Value1 = value1;
   }
   public int Value1 { get;}
}

public class Class2
{
   public object Object1 {get; set;}
}

public class main
{

   Class1 TestClass = new Class1(15);
   Class2 TestClass1 = new Class2();

   public void main()
   {
       TestClass1.Object1 = TestClass();

       //Now I want to this
       Console.WriteLine(TestClass1.Object1.Value1);
       TestClass1.Object1.Value1;   
   }
}

为此,您需要创建该特定类型的属性,而不是使用基本对象类型,如:

public class Class2
{
   public Class1 Object1 {get; set;}
}
然后你可以写:

Class1 TestClass = new Class1(15);
Class2 TestClass1 = new Class2();

public void main()
{
   TestClass1.Object1 = TestClass;

   //Now you can do what you wanted
   Console.WriteLine(TestClass1.Object1.Value1);
}
如果确实要使用对象类型,则需要将对象强制转换为其实际类型,然后可以在编译时使用以下属性:

public class Class2
{
   public object Object1 {get; set;}
}
现在:

public void main()
{
   TestClass1.Object1 = TestClass;

   Class1 temp =  TestClass1.Object1 as Class1;
   // safe guard in case cast fails 
   if(temp !=null)
   {
      //Now you can do what you wanted
      Console.WriteLine(temp.Value1);
   }
}

Class
将其子对象存储为
object
,并且
object
没有属性
Value1

您需要强制转换
Object1
属性或使
Class2
通用

铸造 使
Class2
通用
公共类1
{
公共类1(int value1){value1=value1;}
公共int值1{get;set;}
}
公共课2
{
公共T对象1{get;set;}
}
公共静态异步任务Main()
{
var o1=新类别1(15);
var o2=新类别2();
o2.1=o1;
Console.WriteLine(o2.Object1.Value1);
}

以下方法在构造外部/容器实例时,将嵌套实例作为构造函数参数

        public class Inner
        {
            public Inner(int value)
            {
                Value = value;
            }
            public int Value { get; }
        }

        public class Outer
        {
            public Outer(Inner inner)
            {
                InnerObject = inner;
            }
            public Inner InnerObject { get;}
        }

        public class main
        {       

            static void Main()
            {
                var outer = new Outer(new Inner(10));
                Console.WriteLine(outer.InnerObject.Value);
                var value = outer.InnerObject.Value;
            }
        }

TestClass1.Object1=TestClass()你认为这里会发生什么?。。。这个
TestClass1.Object1.Value1会被大部分开发人员视为一种代码味道。好吧,现在,虽然答案为您提供了关于需要更改哪些内容才能使其“工作”以及为什么您的版本不工作的解释,但我想补充一点,我实际上不建议完全使用它。在大多数情况下,您应该对Class2隐藏
Value1
。这是一个相当抽象的例子,但举例来说,如果你需要从Value1计算一些东西,为什么不让Class1做数学运算呢?
public class Class1
{
    public Class1(int value1) { Value1 = value1; }
    public int Value1 { get; set; }
}

public class Class2<T>
{
    public T Object1 { get; set; }
}

public static async Task Main()
{
    var o1 = new Class1(15);
    var o2 = new Class2<Class1>();

    o2.Object1 = o1;

    Console.WriteLine(o2.Object1.Value1);
}
        public class Inner
        {
            public Inner(int value)
            {
                Value = value;
            }
            public int Value { get; }
        }

        public class Outer
        {
            public Outer(Inner inner)
            {
                InnerObject = inner;
            }
            public Inner InnerObject { get;}
        }

        public class main
        {       

            static void Main()
            {
                var outer = new Outer(new Inner(10));
                Console.WriteLine(outer.InnerObject.Value);
                var value = outer.InnerObject.Value;
            }
        }