public void CastCallMethodInheritedFromBaseClass() { // GeneratorTestDerivedGrain1Reference derives from GeneratorTestGrainReference // GeneratorTestDerivedGrain2Reference derives from GeneratorTestGrainReference // GeneratorTestDerivedDerivedGrainReference derives from GeneratorTestDerivedGrain2Reference Task <bool> isNullStr; IGeneratorTestDerivedGrain1 grain = this.GrainFactory.GetGrain <IGeneratorTestDerivedGrain1>(GetRandomGrainId()); isNullStr = grain.StringIsNullOrEmpty(); Assert.True(isNullStr.Result, "Value should be null initially"); isNullStr = grain.StringSet("a").ContinueWith((_) => grain.StringIsNullOrEmpty()).Unwrap(); Assert.False(isNullStr.Result, "Value should not be null after SetString(a)"); isNullStr = grain.StringSet(null).ContinueWith((_) => grain.StringIsNullOrEmpty()).Unwrap(); Assert.True(isNullStr.Result, "Value should be null after SetString(null)"); IGeneratorTestGrain cast = grain.AsReference <IGeneratorTestGrain>(); isNullStr = cast.StringSet("b").ContinueWith((_) => grain.StringIsNullOrEmpty()).Unwrap(); Assert.False(isNullStr.Result, "Value should not be null after cast.SetString(b)"); }