首页 文章

两个交互式C#类

提问于
浏览
0

这是一个非常初学的问题,但我很难过,我无法弄清楚如何从中得到我想要的东西 . 我有我的第一个类获取信息(数据库/文本文件/无论如何),但我希望它将该信息转发到Class2 .

例如,第一个:

public class Class1
{
    private int first;
    private string firstString;
    private bool isTrue;

    public void SomeMethod() 
    {
        first = 1;
        firstString = "FirstString";
        isTrue = true;
    }
}

这里 SomeMethod 设置了我需要传递给Class2的所有属性 .

ClassTwo看起来像

public class Class2
{
    private int first;
    private string FirstString;
    private bool isTrue;

    private int second;
    private string SecondString;
    private bool isFalse;

    public void SomeOtherMethod() 
    {

    }
}

这里我想要的是 SomeOtherMethod() 使用在Class1的 SomeMethod() 中设置的值设置第一组属性 . 这样我就可以创建一个 Class2 类型的对象并添加我想要的对象 .

2 回答

  • 0

    您必须为Class1的属性定义get accessors,因为它们都不能从类外部访问,而Class2需要使用它们的值 . 使用get访问器定义公共属性可能很有用:

    private int first;
    public int First
    {
        get
        {
            return first;
        }
    }
    

    让Class1中的每个属性都像这样定义,您可以访问这些值 . 在调用SomeMethod之后,可以通过两种简单的方式来均衡两个对象的属性(另请参阅:Signatures and overloading):

    public void SomeOtherMethod() 
    {
        Class1 tempClass = new Class1();
        tempClass.SomeMethod();
    
        this.first = tempClass.first;
        this.FirstString = tempClass.firstString;
        this.isTrue = tempClass.isTrue;
    }
    
    public void SomeOtherMethod(Class1 myClass) // Overloaded method
    {
        this.first = myClass.first;
        this.FirstString = myClass.firstString;
        this.isTrue = myClass.isTrue;
    }
    

    即使上面的技术看起来像你要求的,最好是使用constructors初始化类的属性 . 这样,每次创建Class1对象时都不必调用SomeMethod,也可以在创建新对象时设置其默认值 . 此外,为属性提供更多通用名称将使您免于重复 . 我编写了一些代码,为您提供可理解的语法,以防止将来出现无法访问和重复的问题 .

    public class Class1
    {
        private int number;
        public int Number
        {
            get { return number; }
        }
    
        private string name;
        public string Name
        {
            get { return name; }
        }
    
        private bool isTrue;
        public bool IsTrue
        {
            get { return isTrue; }
        }
    
        public Class1()
        {
            number = 1;
            name = "FirstString";
            isTrue = true;
        }
    
        public Class1(int value1, string value2, bool value3)
        {
            number = value1;
            name = value2;
            isTrue = value3;
        }
    }
    
    public class Class2
    {
        private Class1 firstClass;
        private Class1 secondClass;
    
        public Class2()
        {
            firstClass = new Class1();
            secondClass = new Class1(2, "SecondString", false);
        }
    }
    

    如果你给出一个简短的例子,请参见MSDN List page .

    private List<Class1> class1List = new List<Class1>();
    class1List.Add(new Class1());
    class1List.Add(new Class1(2, "SecondString", false));
    
  • 3

    正如其他一些评论员所说,你真的应该重用你的数据定义 . 这样的事情可以让你开始:

    public class Class1
    {
        private int _myInt;
        private string _myString;
        private bool _myBool;
    
        public void SomeMethod() 
        {
            _myInt = 1;
            _myString = "FirstString";
            _myBool = true;
        }
    }
    
    public Class2
    {
        private Class1 _first = new Class1();
        private Class1 _second = new Class1();
    
        public void SetFirst(Class1 obj)
        {
           _first = obj;
        }
    }
    

    然后使用这样的类:

    Class1 c1 = new Class1();
    Class2 c2 = new Class2();
    
    c1.SomeMethod();
    c2.SetFirst(c1);
    

相关问题