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;
}
}