Color vision checkup I have this old project I wrote years ago and it's all classes and methods all over the place. I am trying to learn/understand how I can apply a more OOP principle. It is very large and can't paste all the code here. Instead I will demonstrate what I have as a basic.

Checkup.cs 

public class CheckUp
{
    //General information
    public string CliniciansName { get; set; }
    public string EmploymentStatus { get; set; }
    public DateTime DateOfCheck { get; set; }
    public string CheckUpType { get; set; }

    public ColourVision ColourVisionObject { get; set; }
    ///lots of other checkups like 45 and growing and forever changin
}


ColourVision.cs

public class ColourVision
{
    public int ColourVisionType { get; set; }
    public int OutcomeID { get; set; }
    public DateTime RecallDate { get; set; }
    public string Recommendations { get; set; }

    //Contains a few horrible methods to parse form other formats,
    // CSV datatables, XML, but needed. Here is one from a DataTable
    public Boolean ColourVision Load(System.Data.DataTable dt){

        Boolean isLoaded = false;
        System.Data.DataRow row = DataRow;
        try
        {
            ColourVisionType = row["ColourVision"].ToString();
            FFTOutcomeID = Convert.ToInt32(import.getOutcomeValue(row["ColourVisionOutcome"].ToString()));
            RecallDate = (row["ColourVisionRecallDate"] != DBNull.Value) ? (DateTime)row["ColourVisionRecallDate"] : DateTime.MinValue;
            Recommendations = (row["ColourVisionRecommendations"] != DBNull.Value) ? (string)row["ColourVisionRecommendations"] : "";
            isLoaded = true;
        }
        catch (Exception ex)
        {
            isLoaded = false;
        }
        return isLoaded;

     }


    //And this takes the data row and populates it self
    //by reference from healtchcheck, where there 
    //are thousands of checks and lines of code
    //and this is what I am trying to streamline
    public void Update(ref Data.CheckUp checkUp)
}


The database is one table with over 400 columns and contains at least the General Info defined in CheckUp. It may or may not contain 0 more fields up to all the fields.

I am racking up my brain on how to create a Checkup Class, that can load the basic data form the data table, or 0 or more checkup objects, without manually calling methods like this for each kind of import logic. 

if (ColorurVision.Load(ref dataRowFromSomethingElse) == true ) { CheckUp.ColourVision == null } 


I am reading about Inheritance and the examples are clear but I just cannot for the life of me figure out how to do that here. I have a feeling this is perfect project for that. Maybe I am just looking at it wrong. Should I be rather inheriting from something else, like System.Data.DataTable and returning ColourVision, or CheckUp?

This is really a high level code review question based more on programming principles.
The biggest issues I see with this code is naming of Classes/Properties/Methods and proper separation of concerns.

I find the best way to think about separation of concerns is to think in terms of "has a" relationships to see if they make sense. For example, you might question whether a "Checkup has an employment status". When you put it that way, it's pretty clear that a Checkup doesn't make sense to have an employment status, but a Person might. It's pretty easy to fall into the trap of saying "I don't need to make a Person class because it's not that complex yet". This will come back to bite you later whether it's another developer that can't understand your code (maybe even yourself) or wishing you could more easily modify functionality because the elements are so tightly coupled.

Here's an example of how you might better organize your classes:

public class CheckUp
{
    public DateTime AppointmentTime { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }

    public Clinician Clinician { get; set; }
    public Patient Patient { get; set; }

    // A type of test might be a ColorVisionTest.
    public List&lt;Test&gt; TestsRun { get; set; }
}

public class Person
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
}

public class Clinician : Person
{
    public List&lt;Licenses&gt; Licenses { get; set; }
}

public class Patient : Person
{
    public List&lt;Checkups&gt; Checkups { get; set; }
}

public static class DatatableTestParser
{
    public static List&lt;Test&gt; ParseTests(DataTable dt)
    {
        // Parsing logic here.
    }
}


To keep harping on the separation of concerns, let's talk about a comment of yours:


  I am racking up my brain on how to create a Checkup Class, that can
  load the basic data form the data table


Typically you don't want to have something like a Checkup class also be concerned with parsing from things like a datatable. Again, a Checkup should only be concerned with being a Checkup and nothing more. You could have another class that did parsing from a DataTable or other data source, but the key is to separate it from the Checkup itself. Hopefully this helps.