# Class Library

In de filmpjes van TDD wordt er gebruik gemaakt van een Class Library. Dit is een soort project dat je ook kan toevoegen in Visual Studio, net zoals Console App of MSTest Test Project.

<figure><img src="https://3730983460-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhJPMgjXkmXyDLB0hWsB8%2Fuploads%2FH3tgEsRWA6KacuR1cPki%2Fimage.png?alt=media&#x26;token=86ee4f70-b2af-4852-8c0f-8071625663cd" alt=""><figcaption></figcaption></figure>

Als je dit project `PopularClasses` noemt dan krijg je dit te zien.

<figure><img src="https://3730983460-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhJPMgjXkmXyDLB0hWsB8%2Fuploads%2FChqlwb9A6j220jvcwJlZ%2Fimage.png?alt=media&#x26;token=253fec3d-4ad2-4320-9e3f-23e908159f55" alt=""><figcaption></figcaption></figure>

```csharp
namespace PopularClasses
{
    public class Class1
    {

    }
}
```

Het zal direct opvallen dat er geen `Program.Main` is. Dit komt omdat een Class Library enkel klassen (en interfaces etc) bevat, maar geen eigen werking naar een console, website of iets anders. Waarom gebruik je ze dan? Je kan hier klassen zetten die je veel gebruikt. Hierna kan je de Class Library koppelen aan andere projecten om toch de klassen binnenin te gebruiken. We hernoemen (rename) Class1 naar `Person` en voegen een property `FirstName` en constructor toe.

Zo kan je in onderstaand voorbeeld `PopularClasses` (Class Library) koppelen (net zoals aan een Test Project) aan `PopularClassesApplication` (Console Application). Je kan daar dan klasse Person gebruiken. Heb je nog een Project dat `Person` wil gebruiken? Dan kan je eenvoudig ook naar daar een dependencie maken.

<figure><img src="https://3730983460-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhJPMgjXkmXyDLB0hWsB8%2Fuploads%2FSCtgU3nVrTiRXyBsyXE4%2Fimage.png?alt=media&#x26;token=44f253be-69bf-4f56-85d0-89e5ac7a671a" alt=""><figcaption></figcaption></figure>

<pre class="language-csharp"><code class="lang-csharp">namespace PopularClasses //in het Class Library-project
{
    public class Person
    {
        private string firstName;

        public string FirstName
<strong>        {
</strong>	    get { return firstName; }
	    set { firstName = value; }
        }

        public Person(string firstName)
        {
            FirstName = firstName;
        }
    }
}
</code></pre>

Let erop dat de klasse Person public moet zijn. [Weet je nog waarom](eerste-voorbeeld-sum)?&#x20;

```csharp
using PopularClasses; //<-- belangrijk!

namespace PopularClassesApplication //in het Console App-project
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person("John");
        }
    }
}
```

{% hint style="info" %}
Je wil meestal geen Console.WriteLine()'s etc gebruiken in Class Libraries omdat je niet zeker bent dat je je Library gaat koppelen aan een ConsoleApplicatie. Je kan dit ook rechtstreeks koppelen aan een TestProject of aan WPF Project(grafische UI applicatie). In beide zit geen Console dus zou je een foutmelding krijgen als je Console wil aanroepen.
{% endhint %}
