Trying to implement cross-class functionality that needs a field to operate in C#
I think the rule you should follow here is "favor composition over inheritance".

What that means in your case is that you create a separate class, something like ReapplyDelay and make both classes own an instance of that class.

The code could look something like this:

class ReapplyDelay
{
    private Queue&lt;KeyValuePair&lt;int, float&gt;&gt; reapplyDelay = new Queue&lt;KeyValuePair&lt;int, float&gt;&gt;();

    public void RemoveOld(float delay, float duration)
    {
        while (reapplyDelay.Count &gt; 0)
        {
            if (reapplyDelay.Peek().Value - delay &gt; duration)
            {
                reapplyDelay.Dequeue();
            }
            else
            {
                break;
            }
        }
    }

    public bool AddNew(EntityInfoServer collidedInfo, float duration)
    {
        if (!reapplyDelay.Any(id =&gt; id.Key == collidedInfo.entityId))
        {
            reapplyDelay.Enqueue(new KeyValuePair&lt;int, float&gt;(collidedInfo.entityId, duration));
            return true;
        }

        return false;
    }
}


And your two original classes would then look like this:

BlazingAura_Server:

private BlazingAuraC_Server conditionInstance;
private ReapplyDelay reapplyDelay = new ReapplyDelay();

void Update()
{
    reapplyDelay.RemoveOld(BlazingAuraC_Server.BURNING_REAPPLY_DELAY, conditionInstance.duration);
}

void OnTriggerEnter(Collider collider)
{
    if (collider.tag != "Spell")
    {
        EntityInfoServer collidedInfo = collider.transform.GetComponentInChildren&lt;EntityInfoServer&gt;();
        collidedInfo.QueueDamageRaw(conditionInstance, BlazingAuraC_Server.TICK_FREQ * BlazingAuraC_Server.BASE_DPS, ValueModDamageSubtype.Elemental);

        if (reapplyDelay.AddNew(collidedInfo, conditionInstance.duration))
        {
            collider.transform.GetComponentInChildren&lt;EntityInfoServer&gt;().AddConditionServer(Condition.Burning, conditionInstance);
        }
    } 
}


Storm_Server:

private float duration;
private ReapplyDelay reapplyDelay = new ReapplyDelay();

void Update()
{
    duration += Time.deltaTime;

    if (Mathf.CeilToInt((duration + Time.deltaTime) / TICK_FREQ) &gt; Mathf.CeilToInt(duration / TICK_FREQ))
    {
        Activate(stormCollider);
    }

    reapplyDelay.RemoveOld(STORM_DRENCH_DELAY, duration);
}

public void OnTriggerEnter(Collider collider)
{
    if (collider.tag == "Player")
    {
        //Debug.Log("IN STORM");
        EntityInfoServer collidedInfo = collider.transform.GetComponentInChildren&lt;EntityInfoServer&gt;();

        if (reapplyDelay.AddNew(collidedInfo, duration))
        {
            collider.transform.GetComponentInChildren&lt;EntityInfoServer&gt;().AddConditionServer(Condition.Drenched, stormInfo);
        }
    }
}


You know your code better than I do, so the details might be different, but the general idea should be clear: extract common independent pieces of functionality into a separate class and then use that.

I have also changed your fields from public to private: if you really need to expose them, you should use public properties, not fields.