Singleton: Accessing Properties?

I am having trouble understanding how to access fields of a singleton class instance. I have read on it a bit, and am modeling my implementation after number four here. This is what I have in my singleton class:

using UnityEngine;
using System.Collections;

public sealed class Materials
{
	private static readonly Materials materials = new Materials();

	private static string wooly {get; set;}

	/*static Materials()
	{
		wooly = "static";
	}*/
	
	private Materials()
	{
		wooly = "private";
	}
	
	public static Materials Instance 
	{
		get 
		{
			return materials;
		}
	}
}

In another code I am using simply:

public string p;
public Materials m;

void Start()
	{
		m = Materials.Instance;
		p = m...; //Ellipses not part of actual code - this is just where the issue comes up

	}

The problem is when I type "p = Materials.Instance. " or "p = m. " intellisense does not allow me to get the “wooly” property in the Materials class. If I enter it anyway, I get an error.

This is made all the more frustrating by various posts on StackExchange stating this very approach - that is not working for me - as the solution to someone else’s issue. So can someone please point out what is wrong with this, or how to access information from a singleton?

P.S. I am still new to this, this is in part a proof of concept for myself that took the better part of the evening, and is inconclusive.

You have not exposed a way to get the wolly field(it’s not a property). You have marked it as private, even though it’s static you can’t reference it by the very nature of private.

Statics make things class members opposed to instance members(you know when you ‘new’ something). You can get access to the private ‘materials’ field because you expose a property called Instance that is a class member of Materials:

Materials.Instance returns the private referenced field called 'materials'.
^Class----^Property

Now technically you could do:

using UnityEngine;
using System.Collections;

public sealed class Materials
{
	private static readonly Materials materials = new Materials();

	private string wooly {get; set;}

	/*static Materials()
	{
		wooly = "static";
	}*/

	private Materials()
	{
		wooly = "private";
	}

	public static Materials Instance 
	{
		get 
		{
			return materials;
		}
	}
	
	// This is an instance member, so up above when you create a New Materials() an instance is created
	// you can then get instance variables/fields/properties/whatever from calling Instance.
	// like Materials.Instance.Wooly
	public string Wooly
	{
		get { return this.wooly; }
		set { this.wooly = value; }
	}
}

Or you could just use a auto get/set for wooly and not use the backing field “wooly”