# API Changes in v2.53

> Reference: API changes of Opc.UaFx.Advanced in v2.53: 32 added, 2 removed, 13 changed, 0 obsoleted.

<dl class="api-definition">
<dt>Releases</dt>
<dd>v2.53.0, v2.53.1</dd>
<dt>Compared with</dt>
<dd>v2.52.0</dd>
<dt>Package</dt>
<dd>Opc.UaFx.Advanced</dd>
</dl>

## Added

### Opc.UaFx

| Symbol | Signature |
|---|---|
| [IOpcDataTypeBuilder](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcdatatypebuilder/)<span class="api-meta">3 members</span> | `public interface IOpcDataTypeBuilder` |
| [OpcCertificateChangedEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccertificatechangedeventargs/)<span class="api-meta">2 members</span> | `public class OpcCertificateChangedEventArgs : EventArgs` |
| [OpcCertificateChangedEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccertificatechangedeventhandler/) | `public delegate void OpcCertificateChangedEventHandler(object sender, OpcCertificateChangedEventArgs e)` |
| [OpcDataTypeNode.Create](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypenode/members#create-opc-uafx-iopcdatatypebuilder) | `public static OpcDataTypeNode Create(IOpcDataTypeBuilder builder)` |
| [OpcEnum](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcenum/)<span class="api-meta">17 members</span> | `public class OpcEnum : IOpcDataTypeBuilder` |
| [OpcEnumField](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcenumfield/)<span class="api-meta">6 members</span> | `public class OpcEnumField` |
| [OpcEnumValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcenumvalue/)<span class="api-meta">19 members</span> | `public class OpcEnumValue : IComparable, IComparable<OpcEnumValue>, IEquatable<OpcEnumValue>` |
| [OpcEnumValuesPropertyNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcenumvaluespropertynode/)<span class="api-meta">19 members</span> | `public class OpcEnumValuesPropertyNode : OpcPropertyNode, IOpcNode, IOpcVariableNodeInfo, IOpcNodeInfo` |
| [OpcMultiStateDiscreteNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmultistatediscretenode/)<span class="api-meta">21 members</span> | `[OpcNodeType(2376)] public class OpcMultiStateDiscreteNode : OpcDiscreteItemNode, IOpcNode, IOpcVariableNodeInfo, IOpcNodeInfo` |
| [OpcMultiStateDiscreteNode&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmultistatediscretenode-1/)<span class="api-meta">27 members</span> | `public class OpcMultiStateDiscreteNode<T> : OpcMultiStateDiscreteNode, IOpcNode, IOpcVariableNodeInfo, IOpcNodeInfo` |
| [OpcMultiStateValueDiscreteNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmultistatevaluediscretenode/)<span class="api-meta">23 members</span> | `[OpcNodeType(11238)] public class OpcMultiStateValueDiscreteNode : OpcDiscreteItemNode, IOpcNode, IOpcVariableNodeInfo, IOpcNodeInfo` |
| [OpcMultiStateValueDiscreteNode&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmultistatevaluediscretenode-1/)<span class="api-meta">27 members</span> | `public class OpcMultiStateValueDiscreteNode<T> : OpcMultiStateValueDiscreteNode, IOpcNode, IOpcVariableNodeInfo, IOpcNodeInfo` |
| [OpcReadEnumValuesPropertyValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadenumvaluespropertyvaluecallback/) | `public delegate OpcPropertyValue<OpcEnumValue[]> OpcReadEnumValuesPropertyValueCallback(OpcReadPropertyValueContext<OpcEnumValuesPropertyNode> context, OpcPropertyValue<OpcEnumValue[]> value)` |
| [OpcStruct](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstruct/)<span class="api-meta">18 members</span> | `public class OpcStruct : IOpcDataTypeBuilder` |
| [OpcStructField](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstructfield/)<span class="api-meta">17 members</span> | `public class OpcStructField` |
| [OpcUserIdentity](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcuseridentity/members#opcuseridentity-opc-uafx-opcidentitytoken) | `protected OpcUserIdentity(OpcIdentityToken token)` |
| [OpcWriteEnumValuesPropertyValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteenumvaluespropertyvaluecallback/) | `public delegate OpcPropertyValue<OpcEnumValue[]> OpcWriteEnumValuesPropertyValueCallback(OpcWritePropertyValueContext<OpcEnumValuesPropertyNode> context, OpcPropertyValue<OpcEnumValue[]> value)` |

### Opc.UaFx.Server

| Symbol | Signature |
|---|---|
| [OpcAccessControlEntry.Assign](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#assign-system-collections-generic-ienumerable-of-opc-uafx-server-opcaccesscontrolrole) | `public OpcAccessControlEntry Assign(IEnumerable<OpcAccessControlRole> roles)` |
| [OpcAccessControlEntry.Assign](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#assign-opc-uafx-server-opcaccesscontrolrole-array) | `public OpcAccessControlEntry Assign(params OpcAccessControlRole[] roles)` |
| [OpcAccessControlEntry.Revoke](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#revoke-system-collections-generic-ienumerable-of-opc-uafx-server-opcaccesscontrolrole) | `public OpcAccessControlEntry Revoke(IEnumerable<OpcAccessControlRole> roles)` |
| [OpcAccessControlEntry.Revoke](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#revoke-opc-uafx-server-opcaccesscontrolrole-array) | `public OpcAccessControlEntry Revoke(params OpcAccessControlRole[] roles)` |
| [OpcAccessControlRole](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolrole/)<span class="api-meta">6 members</span> | `public class OpcAccessControlRole` |
| [OpcAccessControlRoleReadOnlyCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolrolereadonlycollection/)<span class="api-meta">1 member</span> | `public class OpcAccessControlRoleReadOnlyCollection : ReadOnlyCollection<OpcAccessControlRole>, IList<OpcAccessControlRole>, ICollection<OpcAccessControlRole>, IReadOnlyList<OpcAccessControlRole>, IReadOnlyCollection<OpcAccessControlRole>, IEnumerable<OpcAccessControlRole>, IList, ICollection, IEnumerable` |
| [OpcPrincipal.IsInRole](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcprincipal/members#isinrole) | `public virtual bool IsInRole(OpcAccessControlRole role)` |
| [OpcServer.CertificateChanged](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcserver/members#certificatechanged) | `public event OpcCertificateChangedEventHandler CertificateChanged` |
| [OpcServer.OnCertificateChanged](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcserver/members#oncertificatechanged) | `protected virtual void OnCertificateChanged(OpcCertificateChangedEventArgs e)` |
| [OpcServer.OnTypeResolve](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcserver/members#ontyperesolve) | `protected virtual void OnTypeResolve(OpcTypeResolveEventArgs e)` |
| [OpcServer.TypeResolve](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcserver/members#typeresolve) | `public event OpcTypeResolveEventHandler TypeResolve` |
| [OpcServer.UseDynamic](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcserver/members#usedynamic) | `public bool UseDynamic { get; set; }` |
| [OpcServerSecurity.AccessControlRoles](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcserversecurity/members#accesscontrolroles) | `public OpcAccessControlRoleReadOnlyCollection AccessControlRoles { get; }` |
| [OpcServerSecurity.Roles](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcserversecurity/members#roles) | `public OpcServerSecurityRoles Roles { get; }` |
| [OpcServerSecurityRoles](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcserversecurityroles/)<span class="api-meta">9 members</span> | `public class OpcServerSecurityRoles` |

## Removed

### Opc.UaFx

| Symbol | Signature |
|---|---|
| OpcDataTypeNode | `protected OpcDataTypeNode(OpcNodeId id, OpcName name)` |
| OpcDataTypeNode&lt;T&gt;.TypeInfo | `public override OpcDataTypeInfo TypeInfo { get; }` |

## Changed

### Opc.UaFx

| Symbol | Signature (old, new) |
|---|---|
| [OpcDataTypeNode.TypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcdatatypenode/members#typeinfo) | `public virtual OpcDataTypeInfo TypeInfo { get; }`<br>`public OpcDataTypeInfo TypeInfo { get; }` |

### Opc.UaFx.Server

| Symbol | Signature (old, new) |
|---|---|
| [OpcAccessControlEntry.Allow](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#allow-system-collections-generic-ienumerable-of-opc-uafx-server-opcoperationtype) | `public void Allow(IEnumerable<OpcOperationType> operations)`<br>`public OpcAccessControlEntry Allow(IEnumerable<OpcOperationType> operations)` |
| [OpcAccessControlEntry.Allow](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#allow-system-collections-generic-ienumerable-of-opc-uafx-server-opcrequesttype) | `public void Allow(IEnumerable<OpcRequestType> operations)`<br>`public OpcAccessControlEntry Allow(IEnumerable<OpcRequestType> operations)` |
| [OpcAccessControlEntry.Allow](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#allow-opc-uafx-server-opcoperationtype-array) | `public void Allow(params OpcOperationType[] operations)`<br>`public OpcAccessControlEntry Allow(params OpcOperationType[] operations)` |
| [OpcAccessControlEntry.Allow](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#allow-opc-uafx-server-opcrequesttype-array) | `public void Allow(params OpcRequestType[] operations)`<br>`public OpcAccessControlEntry Allow(params OpcRequestType[] operations)` |
| [OpcAccessControlEntry.Deny](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#deny-system-collections-generic-ienumerable-of-opc-uafx-server-opcoperationtype) | `public void Deny(IEnumerable<OpcOperationType> operations)`<br>`public OpcAccessControlEntry Deny(IEnumerable<OpcOperationType> operations)` |
| [OpcAccessControlEntry.Deny](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#deny-system-collections-generic-ienumerable-of-opc-uafx-server-opcrequesttype) | `public void Deny(IEnumerable<OpcRequestType> operations)`<br>`public OpcAccessControlEntry Deny(IEnumerable<OpcRequestType> operations)` |
| [OpcAccessControlEntry.Deny](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#deny-opc-uafx-server-opcoperationtype-array) | `public void Deny(params OpcOperationType[] operations)`<br>`public OpcAccessControlEntry Deny(params OpcOperationType[] operations)` |
| [OpcAccessControlEntry.Deny](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#deny-opc-uafx-server-opcrequesttype-array) | `public void Deny(params OpcRequestType[] operations)`<br>`public OpcAccessControlEntry Deny(params OpcRequestType[] operations)` |
| [OpcAccessControlEntry.Disable](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#disable-system-collections-generic-ienumerable-of-opc-uafx-opcendpointidentity) | `public void Disable(IEnumerable<OpcEndpointIdentity> endpoints)`<br>`public OpcAccessControlEntry Disable(IEnumerable<OpcEndpointIdentity> endpoints)` |
| [OpcAccessControlEntry.Disable](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#disable-opc-uafx-opcendpointidentity-array) | `public void Disable(params OpcEndpointIdentity[] endpoints)`<br>`public OpcAccessControlEntry Disable(params OpcEndpointIdentity[] endpoints)` |
| [OpcAccessControlEntry.Enable](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#enable-system-collections-generic-ienumerable-of-opc-uafx-opcendpointidentity) | `public void Enable(IEnumerable<OpcEndpointIdentity> endpoints)`<br>`public OpcAccessControlEntry Enable(IEnumerable<OpcEndpointIdentity> endpoints)` |
| [OpcAccessControlEntry.Enable](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcaccesscontrolentry/members#enable-opc-uafx-opcendpointidentity-array) | `public void Enable(params OpcEndpointIdentity[] endpoints)`<br>`public OpcAccessControlEntry Enable(params OpcEndpointIdentity[] endpoints)` |
