суперкласс содержит методы C #

Я добавил код из класса Instructor, дайте мне знать, уместно ли также добавить Person.cs. `У меня возникла проблема при попытке выяснить, как получить доступ к методам набора и получения моего класса Address.cs при попытке добавить инструктора в базу данных. Инструктор наследуется от Person.cs, где person содержит объект Address, и поэтому может использовать методы set и get из Address.cs. Однако я не могу использовать эти методы set и get в моем классе Instructor, кроме как путем добавления объекта Address в Instructor или, возможно, включения / переопределения set / get в Person. Мой вопрос: каков правильный / лучший способ установить адрес (String street, String city, String state, int Zip) ВНУТРИ кода класса инструктора? таким образом я могу использовать методы get внутри запроса вставки базы данных

"INSERT * where Id=(" ...........get methods")"

    /*********************************
*  William Tolliver 
*  June 18, 2013
*  C# lab #2 Gui
* instructor Ronald Enz
* *******************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PrjLab2
{
    class Instructor : Person
    {
        #region Fields
        public System.Data.OleDb.OleDbDataAdapter OleDbDataAdapter;
        public System.Data.OleDb.OleDbCommand OleDbSelectCommand;
        public System.Data.OleDb.OleDbCommand OleDbInsertCommand;
        public System.Data.OleDb.OleDbCommand OleDbUpdateCommand;
        public System.Data.OleDb.OleDbCommand OleDbDeleteCommand;
        public System.Data.OleDb.OleDbConnection OleDbConnection;
        private String office;
        public String cmd;
        private Address addr;
        private Schedule sch;
        #endregion

        #region Constructors
        public Instructor() { }
        public Instructor(int i) { SelectDB(i); }
        public Instructor(int i, String f, String l, Address add, Schedule sc, String o, String e)
            : base(f, l, e, i, add, sc)
        {
            office = o;
            addr = add;
            sch = sc;

            insertDB();
        }

        #endregion

        #region Set/Get methods
        public String Office
        {
            get { return office; }
            set { office = value; }
        }
        #endregion

        #region Display method
        public override void display()
        {
            Console.WriteLine(" First Name: " + FName + "\n Last Name: " + LName + "\n ID: " + Id + "\n" + addr.ToString() + "\n Office: " + Office + "\n Email:" + Email);
        }
        #endregion

        #region Database setup
        //=============================  BEHAVIORS =========================
        //++++++++++++++++  DATABASE Data Elements +++++++++++++++++
        public void DBSetup()
        {
            // +++++++++++++++++++++++++++  DBSetup function +++++++++++++++++++++++++++++++
            OleDbDataAdapter = new System.Data.OleDb.OleDbDataAdapter();
            OleDbSelectCommand = new System.Data.OleDb.OleDbCommand();
            OleDbInsertCommand = new System.Data.OleDb.OleDbCommand();
            OleDbUpdateCommand = new System.Data.OleDb.OleDbCommand();
            OleDbDeleteCommand = new System.Data.OleDb.OleDbCommand();
            OleDbConnection = new System.Data.OleDb.OleDbConnection();

            //OleDbDataAdapter1
            OleDbDataAdapter.DeleteCommand = OleDbDeleteCommand;
            OleDbDataAdapter.InsertCommand = OleDbInsertCommand;
            OleDbDataAdapter.SelectCommand = OleDbSelectCommand;
            OleDbDataAdapter.UpdateCommand = OleDbUpdateCommand;

            OleDbConnection.ConnectionString = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database L" +
            "ocking Mode=1;Data Source=C:\\Users\\William\\Documents\\Visual Studio 2012\\Lab3\\RegistrationDB.mdb;J" +
            "et OLEDB:Engine Type=5;Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:System datab" +
            "ase=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=S" +
            "hare Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet " +
            "OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repai" +
            "r=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
        }  //end DBSetup()
        #endregion

        #region Database selection
        public void SelectDB(int i)
        { //++++++++++++++++++++++++++  SELECT +++++++++++++++++++++++++
            DBSetup();
            cmd = "Select * from Instructors where ID = " + i;
            OleDbDataAdapter.SelectCommand.CommandText = cmd;
            OleDbDataAdapter.SelectCommand.Connection = OleDbConnection;
            Console.WriteLine(cmd);
            try
            {
                OleDbConnection.Open();
                System.Data.OleDb.OleDbDataReader dr;
                dr = OleDbDataAdapter.SelectCommand.ExecuteReader();

                dr.Read();
                Id = i;
                FName = dr.GetValue(1).ToString();
                LName = dr.GetValue(2).ToString();
                addr = new Address(dr.GetValue(3).ToString(), dr.GetValue(4).ToString(), dr.GetValue(5).ToString(), Int32.Parse(dr.GetValue(6).ToString()));
                Office = dr.GetValue(7).ToString();
                Email = dr.GetValue(8).ToString();


            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                OleDbConnection.Close();
            }
        } //end SelectDB()
        #endregion

        #region Database insertion
        public void insertDB()
        {
            DBSetup();
            cmd = "INSERT into Instructors values(" + Id + "," + "'" + FName + "'," + "'" + LName + "'," + "'" + addr.Street + "'," + "'" + addr.City + "'," + "'" + addr.State + "'," + "'" + addr.Zip + "'," + "'" + Office + "'," + "'" + Email + "'" + ")";// cmd = "INSERT into Instructors values( Id, FName, LName, addr.Street, addr.City, addr.State,addr.Zip,Office,Email )";
            OleDbDataAdapter.InsertCommand.CommandText = cmd;
            OleDbDataAdapter.InsertCommand.Connection = OleDbConnection;
            Console.WriteLine(cmd);
            try
            {
                OleDbConnection.Open();
                int n = OleDbDataAdapter.InsertCommand.ExecuteNonQuery();
                if (n == 1)
                    Console.WriteLine("Data Inserted");
                else
                    Console.WriteLine("ERROR: Inserting Data");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                OleDbConnection.Close();
            }
        } //end InsertDB()

        #endregion

    }
}   

            `

person user2517965    schedule 24.06.2013    source источник
comment
Пожалуйста, разместите свой код.   -  person Brian    schedule 25.06.2013


Ответы (2)


Не видя вашего кода, его сложно диагностировать. Однако вы сделали свои методы свойств public.

Например:

 public class Person
 {
     public Address Address { get; set; }
     ...
 }

 public class Instructor : Person
 {
     public void DoSomething()
     {
        Address.City = "Wellington";
     }
 }
person Richard Schneider    schedule 24.06.2013
comment
Хорошо, Ричард, можно ли добавить метод set / get в Person для использования инструктором, даже если он есть в Address? Я подумал, что это может быть решением, но я не хотел писать плохой, но функциональный код. - person user2517965; 25.06.2013
comment
Свойства Person обычно являются общедоступными, так что другие классы могут управлять свойствами. Я не уверен, что вы имеете в виду под «плохим». - person Richard Schneider; 25.06.2013
comment
Я имею в виду, что не хотел поступать неправильно, просто потому, что мог найти способ заставить это работать. Например, кто-то может объявить и назначить 25 целых чисел, если захочет, но вы также можете просто использовать массив / список. Я разместил свой код выше, не могли бы вы взглянуть на него? - person user2517965; 25.06.2013

Если вы хотите получить доступ к этим свойствам из дочернего класса, но другие. Так как насчет этого

public class Person
{
     protected Address Address {get;set;}
}

public class Instructor : Person
{
     public void Instructor (int i, String f, String l, Address add, Schedule sc, String o, String e)
     {
        Address = add;
     }
}

Важным моментом здесь является модификатор protected из класса Person. Дополнительную информацию можно получить здесь

person Instance Noodle    schedule 25.06.2013