Singleton question

class A
{
public static A Instance {get; private set;}

	protected virtual void Awake()
	{
		Instance = this;
	}
}

class B : A
{
	protected override void Awake()
	{
		base.Awake();
	}
	
	public void Bmethod()
	{
		//do smth
	}
}

class C
{
	private void SomeMethod()
	{
		B.Instance.Bmethod();
	}
}

So, this is the example. I KNOW this is impossible. My question is how can I achieve this in a similar way, not too long?

I came up with an idea but still think there’s got to be another one, better.

class C
{
	private void SomeMethod()
	{
		B.Instance.gameObject.GetComponent<B>().Bmethod();
	}
}

Something like this.

class A<T> where T:A<T>
{
	public static T Instance {get; private set;}
	protected virtual void Awake()
	{
		Instance = this as T;
	}
}

class B : A<B>
{
	protected override void Awake()
	{
	base.Awake();
	}
	public void Bmethod()
	{
	//do smth
	}
}