Animal, Dog, and IDangerous - Using interfaces and inheritance with C# I'm quite new to object-oriented C#. I wanted to test my knowledge by creating a Dog/Animal classes. I also tried to implement an IDangerous interface in my code.
Is there anything I could've done better/differently? Again, this is my first time on this Stack Exchange so if I could've restructured this post differently please tell me.
public class Animal
{
    public int Age { get; }
    public string Color { get; }
}
public class Dog : Animal
{
    public bool IsVaccinated { get; set; }
    public string Name { get; set; }
}
public interface IDangerous
{
    void TightenLeash(string Reason, int LeashTightness);
}
public class GoldenRetriever : Dog { }
public class Beagle : Dog { }
public class PitBull : Dog, IDangerous
{
    public void TightenLeash(string Reason, int LeashTightness) 
    {
        Console.WriteLine(&quot;Leash tightened...&quot;);
    }
}
static class Program
{
    static void Main(string[] args)
    {
        Dog obj1 = new GoldenRetriever();

        obj1.Name = &quot;Fluffy&quot;;
        obj1.IsVaccinated = true;
        Console.WriteLine(obj1.Name + obj1.IsVaccinated + obj1.Color);

        List&lt;Dog&gt; DogList = new List&lt;Dog&gt;()
        {
            new Beagle()
            {
                IsVaccinated = false,
                Name = &quot;Korg&quot;
            },
            new GoldenRetriever()
            {
                IsVaccinated = true,
                Name = &quot;Juan&quot;
            },
            new Beagle()
            {
                IsVaccinated = false,
                Name = &quot;Toby&quot;
            },
        };

        List&lt;IDangerous&gt; AngryPitBulls = new List&lt;IDangerous&gt;()
        {
            new PitBull()
            {
                IsVaccinated = false,
                Name = &quot;Angry&quot;
            },
            new PitBull()
            {
                IsVaccinated = false,
                Name = &quot;Ryder&quot;
            }
        };
        AngryPitBulls[0].TightenLeash(&quot;For biting another dog&quot;, 3);
        AngryPitBulls[1].TightenLeash(&quot;For biting the cat&quot;, 2);

        Console.ReadLine();
    }


}
Dog obj1 = new GoldenRetriever();

    obj1.Name = &quot;Fluffy&quot;;
    obj1.IsVaccinated = true;
    Console.WriteLine(obj1.Name + obj1.IsVaccinated + obj1.Color);

Variable names: avoid name s like obj1 why not
Dog fluffy=new GoldenRetriever();
You have derived GoldenRetriever and Beagle from Dog. Obviously this is an incomplete example and you may have wanted to add further methods according to breed. In this case however it is often best to modify the implmentation at the time you are introducing the extra methods.
Unless there are different implementations best not to create new classes. So you could have had a member property Breed in the Dog class.
The IDangerous interface looks like it should be called  IDangerousDog
If you had a tiger in data tightening the leash is not a likely scenario except if tigers in the data can only be circus tigers. Even then I am not sure I would want to pull an angry tiger closer to me.
When you construct your Dogs it may be better to use a constructor to instantiate the Name and colour properties. This allows you then to have read only members. This is debateable in your example as you could argue that the name of a dog may change if the owner changes. It is best to keep properties immutable where they should be considered so.
If you stored the date of birth rather than the age then this could be immutable too.
It is much easier then to be confident that the age has been corrupted by a bug. Consider what would happen if a bug where to cause the Update age to be fired more than once or at the wrong time. It would be difficult to go back and identify what the correct age of a dog is. However if the Date of birth is stored you can always calculate the age and if there is a bug in the calculation you have not lost the value on which the age calculation is based.