- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- Administrator's Guide
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
",t};e.buildCustomizationMenuUi=t;function n(e){let t='
",t}function s(e){let n=e.filter.currentValue||e.filter.defaultValue,t='${e.filter.label}
`,e.filter.options.forEach(s=>{let o=s.id===n;t+=``}),t+="${e.filter.label}
`,t+=`ID: csharp-best-practices/dynamic-interface-castable
Language: C#
Severity: Notice
Category: Best Practices
The rule “Check type of interface with DynamicInterfaceCastable” is important to ensure that your program uses the correct type of interface when dealing with dynamic types. DynamicInterfaceCastableImplementation attribute is used to indicate that an interface can be used with the DynamicInterfaceCastable class. This attribute allows the runtime to create a dynamic dispatch stub for any interface with this attribute that a class implements.
In C#, when an interface is marked with the DynamicInterfaceCastableImplementation
attribute, any implementing class should provide a static method for the interface methods. A non-static method would lead to a violation of this rule.
The importance of this rule is to ensure correct implementation of dynamic interfaces, thereby preventing runtime errors and ensuring type safety. To avoid this rule violation, always ensure that methods in classes implementing a dynamic interface are static. This will ensure that the method can be accessed without creating an instance of the class, which is the expected behavior for dynamic interfaces.
If a class inherits an interface with the attribute DynamicInterfaceCastableImplementation
, make sure its members are static.
using System;
using System.Runtime.CompilerServices;
[DynamicInterfaceCastableImplementation]
public interface IMyInterface
{
void DoWork();
}
public class MyClass : IMyInterface
{
// should be static
public void DoWork()
{
Console.WriteLine("Work done!");
}
}
using System;
using System.Runtime.CompilerServices;
// no inheritance
public interface IMyInterface
{
void DoWork();
}
public class MyClass : IMyInterface
{
public void DoWork()
{
Console.WriteLine("Work done!");
}
}
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[DynamicInterfaceCastableImplementation]
public interface IMyInterface
{
void DoWork();
}
public class MyClass : IMyInterface
{
public static void DoWork(IMyInterface instance)
{
Console.WriteLine("Work done!");
}
}