# OpcNode Members

> Reference: Represents the base class of the node classes which define the nodes of an address space, such as OpcObjectNode, OpcVariableNode and OpcMethodNode.

<dl class="api-definition">
<dt>Type</dt>
<dd><a href="./">OpcNode</a></dd>
<dt>Namespace</dt>
<dd><a href="../namespaces/opc.uafx">Opc.UaFx</a></dd>
<dt>Assembly</dt>
<dd>Opc.UaFx.Advanced.dll</dd>
<dt>Package</dt>
<dd>Opc.UaFx.Advanced v2.59.0</dd>
</dl>

## Properties

### Category

Gets the [NodeCategory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#nodecategory) attribute which identifies the kind of node and is therefore used to classify the node regarding its use and purpose.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNodeCategory Category { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property Category As OpcNodeCategory
```

</div>

**Property value**

[OpcNodeCategory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodecategory/)

One of the members defined by the [OpcNodeCategory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodecategory/) enumeration.

**Implements**

[Category](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#category)

### Description

Gets or sets the value of the optional [Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#description) attribute which shall explain the meaning of the node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcText Description { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property Description As OpcText
```

</div>

**Property value**

[OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/)

A localizable instance of the [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/) class which optionally explains the meaning of the node or a null reference (Nothing in Visual Basic) if there is no description associated with the node.

**Implements**

[Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#description), [Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#description)

**Remarks**

The menaning of the node defines the usage, the context and the purpose of the node.

### Descriptions

<span class="api-meta">since v2.12</span>

Gets the [OpcNodeGlobalization](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeglobalization/) instance used to control the localization and other globalization related tasks for the [Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#description) attribute of the current node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNodeGlobalization Descriptions { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property Descriptions As OpcNodeGlobalization
```

</div>

**Property value**

[OpcNodeGlobalization](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeglobalization/)

An instance of the [OpcNodeGlobalization](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeglobalization/) class used by the current [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) to perform localization tasks for its [Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#description).

### DisplayName

Gets or sets the value of the [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#displayname) attribute which defines the localizable name of the node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcText DisplayName { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property DisplayName As OpcText
```

</div>

**Property value**

[OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/)

An instance of the [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/) class which defines the localizable name of the node.

**Implements**

[DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#displayname), [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#displayname)

**Remarks**

Client application should use this attribute if they want to display the name of the node to the user. The [string](https://learn.microsoft.com/dotnet/api/system.string) part of the [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#displayname) is restricted to 512 characters.

### DisplayNames

<span class="api-meta">since v2.12</span>

Gets the [OpcNodeGlobalization](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeglobalization/) instance used to control the localization and other globalization related tasks for the [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#displayname) attribute of the current node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNodeGlobalization DisplayNames { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property DisplayNames As OpcNodeGlobalization
```

</div>

**Property value**

[OpcNodeGlobalization](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeglobalization/)

An instance of the [OpcNodeGlobalization](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeglobalization/) class used by the current [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) to perform localization tasks for its [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#displayname).

### HasPendingChanges

Gets a value indiciating whether there exists any pending change on the node.

<div class="api-signature" data-lang="csharp">

```csharp
public bool HasPendingChanges { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property HasPendingChanges As Boolean
```

</div>

**Property value**

[Boolean](https://learn.microsoft.com/dotnet/api/system.boolean)

The value true if [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) is not equals to [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none); otherwise the value false.

**Implements**

[HasPendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#haspendingchanges)

### Id

Gets the value of the [NodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#nodeid) attribute which unambiguously identifies the node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNodeId Id { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property Id As OpcNodeId
```

</div>

**Property value**

[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)

An instance of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) class representing the unambiguously identifier of the node.

**Implements**

[Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#id)

**Remarks**

Some servers may accept alternative node identifiers in addition to the canonical node identifier represented by this attribute.

A server shall persist the node identifier of a node, that is, it shall not generate new node identifiers when rebooting.

### Model

<span class="api-meta">since v2.50</span>

Gets the [OpcNodeModel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/) which has been used to model this [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) regarding its whole representation in the address space.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNodeModel Model { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property Model As OpcNodeModel
```

</div>

**Property value**

[OpcNodeModel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/)

An instance of the [OpcNodeModel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/) class which provides the modelling directives to use to model the whole node tree of this [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/).

### Name

Gets or sets the value of the [BrowseName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#browsename) attribute which defines the non-localizable human-readable name used when browsing the address space.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcName Name { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property Name As OpcName
```

</div>

**Property value**

[OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/)

**Implements**

[Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#name), [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#name)

**Remarks**

The [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) should never be used to display the name of the a node. Use the [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#displayname) instead for this purpose.

Unlike node identifiers the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) cannot be used to unambiguously identify the node. Different nodes may have the same browse name. The namespace is provided to make the browse name unique in some cases in the context of a node (e.g. properties of a node) although not unique in the context of the server. If different organizations define browse names for properties, the namespace of the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) provided by the organization makes the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) unique, although different organizations may use the same string having a slightly different meaning. Servers may often choose to use the same namespace for the node identifier and the browse name. However, if they want to provide a standard property, its browse name shall have the namespace of the standards body although the namespace of the node identifier reflects something else, for example the local server.

It is recommended that standard bodies defining standard type definitions use their namespace for the node identifier of the type definition node as well as for the browse name of the type definition node.

The [string](https://learn.microsoft.com/dotnet/api/system.string)-part of the browse name is case sensitive. That is, clients shall consider them case sensitive. Server are allowed to handle browse names passed in service requests as case insensitive.

Use the value of this property to construct browse paths (see [OpcNamePath](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamepath/)).

### Namespace

Gets the namespace of the node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNamespace Namespace { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property [Namespace] As OpcNamespace
```

</div>

**Property value**

[OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/)

The [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) assigned to the node or, if no namespace has been assigned to the node, the [Namespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#namespace) of its [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#id).

**Implements**

[Namespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#namespace)

### Parent

<span class="api-meta">virtual</span>

Gets the parent node of the node.

<div class="api-signature" data-lang="csharp">

```csharp
public virtual IOpcNode Parent { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Overridable ReadOnly Property Parent As IOpcNode
```

</div>

**Property value**

[IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/)

An instance implementing the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) interface which represents the phyiscal parent of the node. In general a node can have multiple (logical) parent nodes, but this property provides the only physical parent node of the node. The value can also be a null reference (Nothing in Visual Basic) in case there the node does only have logical parent nodes.

**Implements**

[Parent](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#parent)

### PendingChanges

Gets a value indicating the most recent changes performed on the node since their last notification.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNodeChanges PendingChanges { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property PendingChanges As OpcNodeChanges
```

</div>

**Property value**

[OpcNodeChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/)

A bitwise combination of [OpcNodeChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/) members identifying the changes made on the node or [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none) if there was no change on the node since the last change notification.

**Implements**

[PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#pendingchanges)

**Remarks**

Use one of the [ApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#applychanges-opc-uafx-opccontext) overloads to reset the value of this property to [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none) or use one of the [UpdateChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#updatechanges-opc-uafx-opccontext-opc-uafx-opcnodechanges) overloads to partially reset the pending changes.

### QueryEventsCallback

Gets or sets a callback used to query any event information which belongs to the node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcQueryEventsCallback QueryEventsCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property QueryEventsCallback As OpcQueryEventsCallback
```

</div>

**Property value**

[OpcQueryEventsCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcqueryeventscallback/)

A [OpcQueryEventsCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcqueryeventscallback/) used to query any event information which belongs to the node. The value can also be a null reference (Nothing in Visual Basic).

**Remarks**

A condition refresh reports the retained conditions of the node's children and of the nodes added by [AddNotifier](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#addnotifier) without the callback. Reporting such a condition from the callback as well makes a client receive it twice. The callback is meant for event information that is no child and no notifier of the node.

### ReadDescriptionCallback

Gets or sets a callback used to read the value of the [Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#description) attribute.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcReadAttributeValueCallback<OpcText> ReadDescriptionCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property ReadDescriptionCallback As OpcReadAttributeValueCallback(Of OpcText)
```

</div>

**Property value**

[OpcReadAttributeValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecallback-1/)&lt;[OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/)&gt;

A [OpcReadAttributeValueCallback&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecallback-1/) used to read the value of the [Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#description) attribute as an [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/). The value can also be a null reference (Nothing in Visual Basic).

### ReadDisplayNameCallback

<span class="api-meta">since v2.11</span>

Gets or sets a callback used to read the value of the [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#displayname) attribute.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcReadAttributeValueCallback<OpcText> ReadDisplayNameCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property ReadDisplayNameCallback As OpcReadAttributeValueCallback(Of OpcText)
```

</div>

**Property value**

[OpcReadAttributeValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecallback-1/)&lt;[OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/)&gt;

A [OpcReadAttributeValueCallback&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecallback-1/) used to read the value of the [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#displayname) attribute as an [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/). The value can also be a null reference (Nothing in Visual Basic).

### ReadUserWriteAccessCallback

Gets or sets a callback used to read the value of the [UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#userwriteaccess) attribute.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcReadAttributeValueCallback<OpcAttributeWriteAccess> ReadUserWriteAccessCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property ReadUserWriteAccessCallback As OpcReadAttributeValueCallback(Of OpcAttributeWriteAccess)
```

</div>

**Property value**

[OpcReadAttributeValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecallback-1/)&lt;[OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/)&gt;

A [OpcReadAttributeValueCallback&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecallback-1/) used to read the value of the [UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#userwriteaccess) attribute as a combination of the members defined by the [OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/) enumeration. The value can also be a null reference (Nothing in Visual Basic).

### ReadWriteAccessCallback

Gets or sets a callback used to read the value of the [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#writeaccess) attribute.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcReadAttributeValueCallback<OpcAttributeWriteAccess> ReadWriteAccessCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property ReadWriteAccessCallback As OpcReadAttributeValueCallback(Of OpcAttributeWriteAccess)
```

</div>

**Property value**

[OpcReadAttributeValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecallback-1/)&lt;[OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/)&gt;

A [OpcReadAttributeValueCallback&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecallback-1/) used to read the value of the [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#writeaccess) attribute as a combination of the members defined by the [OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/) enumeration. The value can also be a null reference (Nothing in Visual Basic).

### SymbolicName

Gets or sets a symbolic name for the node which is not expected to be globally unique.

<div class="api-signature" data-lang="csharp">

```csharp
public string SymbolicName { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property SymbolicName As String
```

</div>

**Property value**

[String](https://learn.microsoft.com/dotnet/api/system.string)

The symbolic name of the node or a null reference (Nothing in Visual Basic) if there is no symbolic name assigned. The name can only contain characters which are valid for an XML element name.

**Implements**

[SymbolicName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#symbolicname)

**Remarks**

The symbolic name is not an attribute of the node and is therefore not provided to clients; it is used when the state of the node is saved, for example as the name of its XML element. In case there [UseNodeNameAsDefaultSymbolicName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcautomatism/members#usenodenameasdefaultsymbolicname) is set to the value true and no symbolic name is assigned, the [Value](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/members#value) of the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) is used as the symbolic name when the node is initialized.

### Tag

Gets or sets the object that contains additional user data about the node.

<div class="api-signature" data-lang="csharp">

```csharp
public object Tag { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property Tag As Object
```

</div>

**Property value**

[Object](https://learn.microsoft.com/dotnet/api/system.object)

An [object](https://learn.microsoft.com/dotnet/api/system.object) that contains additional user data about the node. The default is null (Nothing in Visual Basic).

**Implements**

[Tag](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#tag)

### UserWriteAccess

Gets or sets the value of the optional [UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#userwriteaccess) attribute which exposes the possibilities of a client to write the attributes of the node taking user access rights into account.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcAttributeWriteAccess UserWriteAccess { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property UserWriteAccess As OpcAttributeWriteAccess
```

</div>

**Property value**

[OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/)

A combination of the members defined by the [OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/) enumeration.

**Implements**

[UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#userwriteaccess), [UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#userwriteaccess)

**Remarks**

The mask value of this attribute can only further restrict the [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#writeaccess) attribute, when it is set to not writable in the general case that applies for every user.

### WriteAccess

Gets or sets the value of the optional [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#writeaccess) attribute which exposes the posibilities of a client to write the attributes of the node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcAttributeWriteAccess WriteAccess { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property WriteAccess As OpcAttributeWriteAccess
```

</div>

**Property value**

[OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/)

A combination of the members defined by the [OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/) enumeration.

**Implements**

[WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#writeaccess), [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#writeaccess)

**Remarks**

The mask value of this attribute does not take any user access rights into account, that is, altough an attribute is writable this may be restricted to a certain user / user group.

If a server does not have the ability to get the write mask information for a specific attribute from the underlying system, it should state that it is writable. If a write opertation is called on the attribute, the server should transfer this request and return the corresponding [OpcStatusCode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/) if such a request is rejected.

Only in case there a corresponding attribute is set in the mask of this attribute the according attribute is writable; otherwise it can not accessed for writing.

### WriteDescriptionCallback

Gets or sets a callback used to write the value of the [Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#description) attribute.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcWriteAttributeValueCallback<OpcText> WriteDescriptionCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property WriteDescriptionCallback As OpcWriteAttributeValueCallback(Of OpcText)
```

</div>

**Property value**

[OpcWriteAttributeValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecallback-1/)&lt;[OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/)&gt;

A [OpcWriteAttributeValueCallback&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecallback-1/) used to write the value of the [Description](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#description) attribute as an [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/). The value can also be a null reference (Nothing in Visual Basic).

### WriteDisplayNameCallback

<span class="api-meta">since v2.11</span>

Gets or sets a callback used to write the value of the [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#displayname) attribute.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcWriteAttributeValueCallback<OpcText> WriteDisplayNameCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property WriteDisplayNameCallback As OpcWriteAttributeValueCallback(Of OpcText)
```

</div>

**Property value**

[OpcWriteAttributeValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecallback-1/)&lt;[OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/)&gt;

A [OpcWriteAttributeValueCallback&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecallback-1/) used to write the value of the [DisplayName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#displayname) attribute as an [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/). The value can also be a null reference (Nothing in Visual Basic).

### WriteUserWriteAccessCallback

Gets or sets a callback used to write the value of the [UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#userwriteaccess) attribute.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcWriteAttributeValueCallback<OpcAttributeWriteAccess> WriteUserWriteAccessCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property WriteUserWriteAccessCallback As OpcWriteAttributeValueCallback(Of OpcAttributeWriteAccess)
```

</div>

**Property value**

[OpcWriteAttributeValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecallback-1/)&lt;[OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/)&gt;

A [OpcWriteAttributeValueCallback&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecallback-1/) used to write the value of the [UserWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#userwriteaccess) attribute as a combination of the members defined by the [OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/) enumeration. The value can also be a null reference (Nothing in Visual Basic).

### WriteWriteAccessCallback

Gets or sets a callback used to write the value of the [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#writeaccess) attribute.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcWriteAttributeValueCallback<OpcAttributeWriteAccess> WriteWriteAccessCallback { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Property WriteWriteAccessCallback As OpcWriteAttributeValueCallback(Of OpcAttributeWriteAccess)
```

</div>

**Property value**

[OpcWriteAttributeValueCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecallback-1/)&lt;[OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/)&gt;

A [OpcWriteAttributeValueCallback&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecallback-1/) used to write the value of the [WriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#writeaccess) attribute as a combination of the members defined by the [OpcAttributeWriteAccess](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributewriteaccess/) enumeration. The value can also be a null reference (Nothing in Visual Basic).

## Methods

### AddNotifier

<span class="api-meta">virtual</span>

When implemented in a subtype, adds the `node` to the collection of notifiers (= event sources) of this node.

<div class="api-signature" data-lang="csharp">

```csharp
public virtual void AddNotifier(OpcContext context, IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Overridable Sub AddNotifier(context As OpcContext, node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to add the `node` as the notifying event source. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance acting as the notifier. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` or `node` is null reference (Nothing in Visual Basic). |
| [NotSupportedException](https://learn.microsoft.com/dotnet/api/system.notsupportedexception) | Adding notifiers is only supported on [OpcObjectNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcobjectnode/) and its subclasses. |

**Implements**

[AddNotifier](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#addnotifier)

**Remarks**

If the `node` is the first notifier being added to the collection of notifiers the [EventNotifier](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/#eventnotifier) attribute of this [OpcObjectNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcobjectnode/) is set to 'SubscribeToEvents'.

### ApplyChanges

<span class="api-meta">virtual · 2 overloads</span>

| Overload | Description |
|---|---|
| [ApplyChanges(OpcContext)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#applychanges-opc-uafx-opccontext)<span class="api-meta">virtual</span> | Notifies about changes performed on the node since the last notification and resets the pending changes to [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none). |
| [ApplyChanges(OpcContext, bool)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#applychanges-opc-uafx-opccontext-system-boolean)<span class="api-meta">virtual</span> | Notifies about changes performed on the node (and optionally on its children) since the last notification and resets the pending changes to [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none). |

**Exceptions (all overloads)**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` is a null reference (Nothing in Visual Basic). |

#### ApplyChanges(OpcContext)

<span class="api-meta">virtual</span>

Notifies about changes performed on the node since the last notification and resets the pending changes to [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none).

<div class="api-signature" data-lang="csharp">

```csharp
public virtual void ApplyChanges(OpcContext context)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Overridable Sub ApplyChanges(context As OpcContext)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to notify about changes performed on the node. |

**Implements**

[ApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#applychanges-opc-uafx-opccontext)

**Remarks**

This method influences the value of the properties [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) and [HasPendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#haspendingchanges). After a call to [ApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#applychanges-opc-uafx-opccontext) the [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) property returns [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none) and the [HasPendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#haspendingchanges) the value false. The method is not synchronized, see [ApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#applychanges-opc-uafx-opccontext-system-boolean).

#### ApplyChanges(OpcContext, bool)

<span class="api-meta">virtual</span>

Notifies about changes performed on the node (and optionally on its children) since the last notification and resets the pending changes to [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none).

<div class="api-signature" data-lang="csharp">

```csharp
public virtual void ApplyChanges(OpcContext context, bool recursive)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Overridable Sub ApplyChanges(context As OpcContext, recursive As Boolean)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to notify about changes performed on the node. |
| `recursive` | [Boolean](https://learn.microsoft.com/dotnet/api/system.boolean) | The value true if pending changes are to be notified for all children as well; otherwise the value false. |

**Implements**

[ApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#applychanges-opc-uafx-opccontext-system-boolean)

**Remarks**

This method influences the value of the properties [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) and [HasPendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#haspendingchanges). After a call to [ApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#applychanges-opc-uafx-opccontext-system-boolean) the [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) property returns [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/#none) and the [HasPendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#haspendingchanges) the value false.

The method is not synchronized. A change made by another thread while the method runs can be reset without being notified. Change and apply the changes of a node from one thread at a time, or hold `OpcNodeManager.SyncRoot` of the node manager of the node, which describes what that lock covers.

### AttributeValue

<span class="api-meta">2 overloads · since v2.9</span>

| Overload | Description |
|---|---|
| [AttributeValue(OpcAttribute)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#attributevalue-opc-uafx-opcattribute)<span class="api-meta">since v2.9</span> | Retrieves the value of the `attribute` specified. |
| [AttributeValue&lt;T&gt;(OpcAttribute)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#attributevalue-t1-opc-uafx-opcattribute)<span class="api-meta">since v2.9</span> | Retrieves the value of the `attribute` specified. |

#### AttributeValue(OpcAttribute)

<span class="api-meta">since v2.9</span>

Retrieves the value of the `attribute` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public object AttributeValue(OpcAttribute attribute)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function AttributeValue(attribute As OpcAttribute) As Object
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `attribute` | [OpcAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/) | One of the members defined by the [OpcAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/) enumeration which identifies the attribute its value is queried. |

**Returns**

[Object](https://learn.microsoft.com/dotnet/api/system.object)

The value of the `attribute` specified or a null reference (Nothing in Visual Basic) in case there the value of the attribute is a null reference or it is not supported by the current [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/).

**Implements**

[AttributeValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#attributevalue-opc-uafx-opcattribute)

#### AttributeValue&lt;T&gt;(OpcAttribute)

<span class="api-meta">since v2.9</span>

Retrieves the value of the `attribute` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public T AttributeValue<T>(OpcAttribute attribute)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function AttributeValue(Of T)(attribute As OpcAttribute) As T
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The expected type of value the attribute shall offer. |

**Parameters**

| Name | Type | Description |
|---|---|---|
| `attribute` | [OpcAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/) | One of the members defined by the [OpcAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattribute/) enumeration which identifies the attribute its value is queried. |

**Returns**

T

The value of the `attribute` as the type `T` specified or the default value of the type `T` in case there the value of the attribute is a null reference (Nothing in Visual Basic) or it is not supported by the current [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/).

**Implements**

[AttributeValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#attributevalue-t1-opc-uafx-opcattribute)

### Child

<span class="api-meta">since v2.7</span>

Retrieves the child node its [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) property matches exactly the `name` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNode Child(OpcContext context, OpcName name)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function Child(context As OpcContext, name As OpcName) As IOpcNode
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to lookup the requested child node. |
| `name` | [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/) | The full qualified [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/) of the node to lookup. |

**Returns**

[IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/)

An instance implementing the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) interface its [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) exactly matches the `name` specified, if such a node is a known child node of this node. Otherwise a null reference (Nothing in Visual Basic).

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` or `name` is a null reference (Nothing in Visual Basic). |

**Implements**

[Child](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#child)

### ChildModel

<span class="api-meta">protected · since v2.50</span>

Retrieves the model of the child node with the `name` specified from the [Model](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#model) of the node.

<div class="api-signature" data-lang="csharp">

```csharp
protected OpcNodeModel ChildModel(OpcName name)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Function ChildModel(name As OpcName) As OpcNodeModel
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `name` | [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/) | The [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/) of the child node whose model is to be retrieved. |

**Returns**

[OpcNodeModel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/)

The [OpcNodeModel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/) defined for the child node with the `name` specified, the model defined for all children if there is no model for the specific child node or [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/members#none) if neither of them is defined.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `name` is a null reference (Nothing in Visual Basic). |

### ChildModellingDirective

<span class="api-meta">protected · since v2.50</span>

Retrieves the modelling directive of the child node with the `name` specified from the [Model](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#model) of the node.

<div class="api-signature" data-lang="csharp">

```csharp
protected OpcModellingDirective ChildModellingDirective(OpcName name)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Function ChildModellingDirective(
    name As OpcName) As OpcModellingDirective
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `name` | [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/) | The [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/) of the child node whose modelling directive is to be retrieved. |

**Returns**

[OpcModellingDirective](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmodellingdirective/)

The [Directive](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/members#directive) of the model which [ChildModel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#childmodel) retrieves for the child node.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `name` is a null reference (Nothing in Visual Basic). |

### Children

Retrieves a sequence of all nodes organized as children of this node.

<div class="api-signature" data-lang="csharp">

```csharp
public IEnumerable<IOpcNode> Children(OpcContext context)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function Children(context As OpcContext) As IEnumerable(Of IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to lookup the child nodes. |

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/)&gt;

A sequence of instances implementing the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) interface which representing the nodes organized as child nodes of this node.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` is a null reference (Nothing in Visual Basic). |

**Implements**

[Children](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#children)

### DefineModel

<span class="api-meta">protected · static · 2 overloads · since v2.27</span>

| Overload | Description |
|---|---|
| [DefineModel&lt;T&gt;(OpcModellingRule, OpcNamePath)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#definemodel-t1-opc-uafx-opcmodellingrule-opc-uafx-opcnamepath)<span class="api-meta">protected · static · since v2.27</span> | Defines a model rule for the model of the node type specified by `T` using the `rule` which is to be applied to the node known under the `path` passed. |
| [DefineModel&lt;T&gt;(OpcModellingRule, params OpcName\[\])](#definemodel-t1-opc-uafx-opcmodellingrule-opc-uafx-opcname-array)<span class="api-meta">protected · static · since v2.27</span> | Defines a model rule for the model of the node type specified by `T` using the `rule` which is to be applied to the node known under the `pathElements` passed. |

#### DefineModel&lt;T&gt;(OpcModellingRule, OpcNamePath)

<span class="api-meta">protected · static · since v2.27</span>

Defines a model rule for the model of the node type specified by `T` using the `rule` which is to be applied to the node known under the `path` passed.

<div class="api-signature" data-lang="csharp">

```csharp
protected static void DefineModel<T>(
    OpcModellingRule rule,
    OpcNamePath path)
    where T : OpcNode
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Shared Sub DefineModel(Of T As OpcNode)(
    rule As OpcModellingRule,
    path As OpcNamePath)
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The type of [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) for which the model rule is to be applied. |

**Parameters**

| Name | Type | Description |
|---|---|---|
| `rule` | [OpcModellingRule](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmodellingrule/) | The [OpcModellingRule](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmodellingrule/) to apply. |
| `path` | [OpcNamePath](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamepath/) | The [OpcNamePath](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamepath/) to the node affected. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `path` is a null reference (Nothing in Visual Basic). |

#### DefineModel&lt;T&gt;(OpcModellingRule, params OpcName\[\])

<span class="api-meta">protected · static · since v2.27</span>

Defines a model rule for the model of the node type specified by `T` using the `rule` which is to be applied to the node known under the `pathElements` passed.

<div class="api-signature" data-lang="csharp">

```csharp
protected static void DefineModel<T>(
    OpcModellingRule rule,
    params OpcName[] pathElements)
    where T : OpcNode
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Shared Sub DefineModel(Of T As OpcNode)(
    rule As OpcModellingRule,
    ParamArray pathElements As OpcName())
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The type of [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) for which the model rule is to be applied. |

**Parameters**

| Name | Type | Description |
|---|---|---|
| `rule` | [OpcModellingRule](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmodellingrule/) | The [OpcModellingRule](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmodellingrule/) to apply. |
| `pathElements` | params [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/)[] | The [OpcName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcname/)'s to the node affected. |

### GetType

<span class="api-meta">static · since v2.20</span>

Retrieves the [Type](https://learn.microsoft.com/dotnet/api/system.type) which implementes the node type which is identified by the `typeId` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static Type GetType(OpcNodeId typeId)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Function [GetType](typeId As OpcNodeId) As Type
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `typeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) which identifies the [Type](https://learn.microsoft.com/dotnet/api/system.type) to retrieve. |

**Returns**

[Type](https://learn.microsoft.com/dotnet/api/system.type)

The [Type](https://learn.microsoft.com/dotnet/api/system.type) which is known under the `typeId` specified or a null reference (Nothing in Visual Basic) if there doesn't exist a known [Type](https://learn.microsoft.com/dotnet/api/system.type) which is associated with the `typeId` specified.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `typeId` is a null reference (Nothing in Visual Basic). |

### GetTypeInfo

<span class="api-meta">static · 3 overloads · since v2.20</span>

| Overload | Description |
|---|---|
| [GetTypeInfo&lt;T&gt;()](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#gettypeinfo-t1)<span class="api-meta">static · since v2.20</span> | Retrieves the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which declares the node type implemented by the `T` specified. |
| [GetTypeInfo(OpcNodeId)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#gettypeinfo-opc-uafx-opcnodeid)<span class="api-meta">static · since v2.20</span> | Retrieves the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which declares the node type which is identified by the `typeId` specified. |
| [GetTypeInfo(Type)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#gettypeinfo-system-type)<span class="api-meta">static · since v2.20</span> | Retrieves the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which declares the node type implemented by the `underlyingType` specified. |

#### GetTypeInfo&lt;T&gt;()

<span class="api-meta">static · since v2.20</span>

Retrieves the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which declares the node type implemented by the `T` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static OpcNodeTypeInfo GetTypeInfo<T>()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Function GetTypeInfo(Of T)() As OpcNodeTypeInfo
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The [Type](https://learn.microsoft.com/dotnet/api/system.type) which implements the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) to retrieve. |

**Returns**

[OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/)

The [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which declares the `T` specified or a null reference (Nothing in Visual Basic) if there isn't a [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) associated with the `T` specified.

#### GetTypeInfo(OpcNodeId)

<span class="api-meta">static · since v2.20</span>

Retrieves the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which declares the node type which is identified by the `typeId` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static OpcNodeTypeInfo GetTypeInfo(OpcNodeId typeId)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Function GetTypeInfo(typeId As OpcNodeId) As OpcNodeTypeInfo
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `typeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) which identifies the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) to retrieve. |

**Returns**

[OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/)

The [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which is known under the `typeId` specified or a null reference (Nothing in Visual Basic) if there doesn't exist a known [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which is associated with the `typeId` specified.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `typeId` is a null reference (Nothing in Visual Basic). |

#### GetTypeInfo(Type)

<span class="api-meta">static · since v2.20</span>

Retrieves the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which declares the node type implemented by the `underlyingType` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static OpcNodeTypeInfo GetTypeInfo(Type underlyingType)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Function GetTypeInfo(underlyingType As Type) As OpcNodeTypeInfo
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `underlyingType` | [Type](https://learn.microsoft.com/dotnet/api/system.type) | The [Type](https://learn.microsoft.com/dotnet/api/system.type) which implements the [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) to retrieve. |

**Returns**

[OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/)

The [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) which declares the `underlyingType` specified or a null reference (Nothing in Visual Basic) if there isn't a [OpcNodeTypeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeinfo/) associated with the `underlyingType` specified.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `underlyingType` is a null reference (Nothing in Visual Basic). |

### Implement

<span class="api-meta">protected · virtual · since v2.26</span>

Performs node specific implementation tasks to finalize the node creation before it can be used for the first time.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void Implement(OpcContext context)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub Implement(context As OpcContext)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to implement the node. |

### InitializeChildren

<span class="api-meta">protected · virtual · since v2.54</span>

Initializes the children of the node.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void InitializeChildren(OpcContext context)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub InitializeChildren(context As OpcContext)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to initialize the children. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` is a null reference (Nothing in Visual Basic). |

### InitializeDefaults

<span class="api-meta">protected · virtual</span>

Initializes the default values used by the node implementation represented / required.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void InitializeDefaults()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub InitializeDefaults()
```

</div>

**Remarks**

This method is always called by the lowest constructor of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) constructor chain to initialize all default values which are explicitly necessary before the node is (for example) added as a child node of another node. In case there a parent node is passed to constructor this becomes essential to ensure that the node is initialized appropriately before it is added to the parent.

Only implement this method in case there is a custom node setup required (typically performed within the custom constructor). Any code for member field initialization or additional logic can be kept in the constructor.

### IsAccessible

<span class="api-meta">virtual · since v2.54</span>

Determines whether the node is accessible using the `context` specified within the view identified by the `viewId` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public virtual bool IsAccessible(OpcContext context, OpcNodeId viewId)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Overridable Function IsAccessible(
    context As OpcContext,
    viewId As OpcNodeId) As Boolean
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) within that the node is accessed. |
| `viewId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) of the view within that the node is accessed or [Null](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#null) if the node is not accessed within a specific view. |

**Returns**

[Boolean](https://learn.microsoft.com/dotnet/api/system.boolean)

The value true if the node is accessible; otherwise the value false. The default implementation always returns the value true.

### IsChangePending

Determines whether all of the changes specified by the `change` are pending on the node (see [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges)).

<div class="api-signature" data-lang="csharp">

```csharp
public bool IsChangePending(OpcNodeChanges change)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function IsChangePending(change As OpcNodeChanges) As Boolean
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `change` | [OpcNodeChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/) | A bitwise combination of [OpcNodeChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/) members identifying the changes to check. |

**Returns**

[Boolean](https://learn.microsoft.com/dotnet/api/system.boolean)

The value true if all of the changes specified by the `change` are pending on the node; otherwise the value false.

**Implements**

[IsChangePending](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#ischangepending)

### OnAfterAdded

<span class="api-meta">protected · virtual · since v2.26</span>

Raises the [AfterAdded](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#afteradded) event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnAfterAdded(OpcNodeAddedEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnAfterAdded(e As OpcNodeAddedEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeAddedEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeaddedeventargs/) | The [OpcNodeAddedEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeaddedeventargs/) with the event data. |

### OnAfterApplyChanges

<span class="api-meta">protected · virtual · since v2.10</span>

Raises the [AfterApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#afterapplychanges) event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnAfterApplyChanges(OpcNodeChangesEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnAfterApplyChanges(e As OpcNodeChangesEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeChangesEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventargs/) | The [OpcNodeChangesEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventargs/) with the event data. |

### OnBeforeAdded

<span class="api-meta">protected · virtual · since v2.26</span>

Raises the [BeforeAdded](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#beforeadded) event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnBeforeAdded(OpcNodeAddedEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnBeforeAdded(e As OpcNodeAddedEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeAddedEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeaddedeventargs/) | The [OpcNodeAddedEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeaddedeventargs/) with the event data. |

### OnBeforeApplyChanges

<span class="api-meta">protected · virtual · since v2.10</span>

Raises the [BeforeApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#beforeapplychanges) event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnBeforeApplyChanges(OpcNodeChangesEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnBeforeApplyChanges(e As OpcNodeChangesEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeChangesEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventargs/) | The [OpcNodeChangesEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventargs/) with the event data. |

### OnChangesUnhandled

<span class="api-meta">protected · virtual · since v2.50</span>

Raises the [ChangesUnhandled](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#changesunhandled) event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnChangesUnhandled(OpcNodeChangesEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnChangesUnhandled(e As OpcNodeChangesEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeChangesEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventargs/) | The [OpcNodeChangesEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventargs/) with the event data. |

### OnEventReported

<span class="api-meta">protected · virtual · since v2.54</span>

Raises the [EventReported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#eventreported) event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnEventReported(OpcNodeEventReportedEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnEventReported(e As OpcNodeEventReportedEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeEventReportedEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeeventreportedeventargs/) | The [OpcNodeEventReportedEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeeventreportedeventargs/) with the event data. |

### QueryEventsCore

<span class="api-meta">protected · virtual</span>

Queries the events which belong to the node using the [QueryEventsCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#queryeventscallback), if one is assigned.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void QueryEventsCore(
    OpcNodeContext context,
    OpcEventCollection events)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub QueryEventsCore(
    context As OpcNodeContext,
    events As OpcEventCollection)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcNodeContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodecontext/) | The [OpcNodeContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodecontext/) to use to query the node events. |
| `events` | [OpcEventCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventcollection/) | The [OpcEventCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventcollection/) to use to store the result of the query. |

### ReadAttributeValueCore

<span class="api-meta">protected · virtual</span>

Determines the value of the attribute to read. In case there a callback is assigned to read the value of the attribute (see [ReadDisplayNameCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#readdisplaynamecallback), [ReadDescriptionCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#readdescriptioncallback), [ReadUserWriteAccessCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#readuserwriteaccesscallback) and [ReadWriteAccessCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#readwriteaccesscallback)) the callback determines the value; otherwise the preliminary `value` is returned.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcAttributeValue<T> ReadAttributeValueCore<T>(
    OpcReadAttributeValueContext context,
    OpcAttributeValue<T> value)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function ReadAttributeValueCore(Of T)(
    context As OpcReadAttributeValueContext,
    value As OpcAttributeValue(Of T)) As OpcAttributeValue(Of T)
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The type of attribute value to read. |

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcReadAttributeValueContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecontext/) | The [OpcReadAttributeValueContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadattributevaluecontext/) to use to read the attribute value. |
| `value` | [OpcAttributeValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributevalue-1/)&lt;T&gt; | The preliminary [OpcAttributeValue&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributevalue-1/). |

**Returns**

[OpcAttributeValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributevalue-1/)&lt;T&gt;

The determined [OpcAttributeValue&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributevalue-1/).

### References

<span class="api-meta">virtual · since v2.50</span>

Retrieves a sequence of immutable references between this node and other nodes.

<div class="api-signature" data-lang="csharp">

```csharp
public virtual IEnumerable<OpcReference> References()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Overridable Function References() As IEnumerable(Of OpcReference)
```

</div>

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcReference](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreference/)&gt;

A sequence of [OpcReference](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreference/) instances providing hierarchical and non-hierarchical references from this node to other nodes.

**Implements**

[References](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#references)

### RegisterType

<span class="api-meta">static · 4 overloads · since v2.20</span>

| Overload | Description |
|---|---|
| [RegisterType&lt;T&gt;()](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertype-t1)<span class="api-meta">static · since v2.20</span> | Registers the type defined by `T` as the node object type to create in case there a node instance is to be created for the type definition identified by the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) defined on the `T` specified. |
| [RegisterType(Type)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertype-system-type)<span class="api-meta">static · since v2.20</span> | Registers the `nodeType` specified as the node object type to create in case there a node instance is to be created for the type node identified by the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) defined on the `nodeType` specified. |
| [RegisterType&lt;T&gt;(OpcNodeId)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertype-t1-opc-uafx-opcnodeid)<span class="api-meta">static · since v2.20</span> | Registers the type defined by `T` as the node object type to create in case there a node instance is to be created for the type definition identified by the `nodeTypeId` specified. |
| [RegisterType(Type, OpcNodeId)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertype-system-type-opc-uafx-opcnodeid)<span class="api-meta">static · since v2.20</span> | Registers the `nodeType` specified as the node object type to create in case there a node instance is to be created for the type node identified by the `nodeTypeId` specified. |

#### RegisterType&lt;T&gt;()

<span class="api-meta">static · since v2.20</span>

Registers the type defined by `T` as the node object type to create in case there a node instance is to be created for the type definition identified by the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) defined on the `T` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void RegisterType<T>()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub RegisterType(Of T)()
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The type to use in case there a node object for the node type equals to the node type identifier defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) is to be created. The type needs be a subclass of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) class. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The type `T` uses any node type specific attribute which offers invalid information about the node type to associate with the [Type](https://learn.microsoft.com/dotnet/api/system.type). |

#### RegisterType(Type)

<span class="api-meta">static · since v2.20</span>

Registers the `nodeType` specified as the node object type to create in case there a node instance is to be created for the type node identified by the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) defined on the `nodeType` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void RegisterType(Type nodeType)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub RegisterType(nodeType As Type)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeType` | [Type](https://learn.microsoft.com/dotnet/api/system.type) | The [Type](https://learn.microsoft.com/dotnet/api/system.type) to use in case there a node object for the node type equals to the node type identifier defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) is to be created. The type needs be a subclass of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) class. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `nodeType` uses any node type specific attribute which offers invalid information about the node type to associate with the [Type](https://learn.microsoft.com/dotnet/api/system.type). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeType` is a null reference (Nothing in Visual Basic). |

#### RegisterType&lt;T&gt;(OpcNodeId)

<span class="api-meta">static · since v2.20</span>

Registers the type defined by `T` as the node object type to create in case there a node instance is to be created for the type definition identified by the `nodeTypeId` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void RegisterType<T>(OpcNodeId nodeTypeId)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub RegisterType(Of T)(nodeTypeId As OpcNodeId)
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The type to use in case there a node object for the node type equals to the node type identifier defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) is to be created. The type needs be a subclass of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) class. |

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeTypeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The identifier of the type node for which the `T` is to be used to create a node object instance. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The type `T` uses any node type specific attribute which offers invalid information about the node type to associate with the [Type](https://learn.microsoft.com/dotnet/api/system.type). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeTypeId` is a null reference (Nothing in Visual Basic). |

**Remarks**

It is not possible to register the same or a different node type for the `nodeTypeId` specified as long there is already a node type registered for the type node specified by `nodeTypeId`.

#### RegisterType(Type, OpcNodeId)

<span class="api-meta">static · since v2.20</span>

Registers the `nodeType` specified as the node object type to create in case there a node instance is to be created for the type node identified by the `nodeTypeId` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void RegisterType(Type nodeType, OpcNodeId nodeTypeId)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub RegisterType(nodeType As Type, nodeTypeId As OpcNodeId)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeType` | [Type](https://learn.microsoft.com/dotnet/api/system.type) | The [Type](https://learn.microsoft.com/dotnet/api/system.type) to use in case there a node object for the node type equals to the node type identifier defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) is to be created. The type needs be a subclass of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) class. |
| `nodeTypeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The identifier of the type node for which the `nodeType` is to be used to create a node object instance. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `nodeType` uses any node type specific attribute which offers invalid information about the node type to associate with the [Type](https://learn.microsoft.com/dotnet/api/system.type). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeType` or `nodeTypeId` is a null reference (Nothing in Visual Basic). |

**Remarks**

It is not possible to register the same or a different node type for the `nodeTypeId` specified as long there is already a node type registered for the type node specified by `nodeTypeId`.

### RegisterTypes

<span class="api-meta">static · 3 overloads · since v2.20</span>

| Overload | Description |
|---|---|
| [RegisterTypes(Assembly)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertypes-system-reflection-assembly)<span class="api-meta">static · since v2.20</span> | Registers all non-abstract types in the `assembly` specified which defines the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/). |
| [RegisterTypes(IEnumerable&lt;Type&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertypes-system-collections-generic-ienumerable-of-system-type)<span class="api-meta">static · since v2.20</span> | Registers the `nodeTypes` specified as the node object type to create in case there a node instance is to be created for the type nodes identified by the [OpcEventTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventtypeattribute/) used on one of the `nodeTypes` specified. |
| [RegisterTypes(Type, params Type\[\])](#registertypes-system-type-system-type-array)<span class="api-meta">static · since v2.20</span> | Registers the `nodeType` and the further specified `nodeTypes` as the node object type to create in case there a node instance is to be created for the type node identified by the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) used on the `nodeType` or on one of the `nodeTypes` specified. |

**Exceptions (all overloads)**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | A [Type](https://learn.microsoft.com/dotnet/api/system.type) does not use any node type specific attribute which offers invalid information about the node type to associate with the [Type](https://learn.microsoft.com/dotnet/api/system.type). |

#### RegisterTypes(Assembly)

<span class="api-meta">static · since v2.20</span>

Registers all non-abstract types in the `assembly` specified which defines the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/).

<div class="api-signature" data-lang="csharp">

```csharp
public static void RegisterTypes(Assembly assembly)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub RegisterTypes(assembly As Assembly)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `assembly` | [Assembly](https://learn.microsoft.com/dotnet/api/system.reflection.assembly) | The [Assembly](https://learn.microsoft.com/dotnet/api/system.reflection.assembly) its types are inspected for types which using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/). |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `assembly` is a null reference (Nothing in Visual Basic). |

**Remarks**

The [Type](https://learn.microsoft.com/dotnet/api/system.type) instances to register need to define the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) and needs to be a subclass of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) class.

#### RegisterTypes(IEnumerable&lt;Type&gt;)

<span class="api-meta">static · since v2.20</span>

Registers the `nodeTypes` specified as the node object type to create in case there a node instance is to be created for the type nodes identified by the [OpcEventTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventtypeattribute/) used on one of the `nodeTypes` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void RegisterTypes(IEnumerable<Type> nodeTypes)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub RegisterTypes(nodeTypes As IEnumerable(Of Type))
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeTypes` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[Type](https://learn.microsoft.com/dotnet/api/system.type)&gt; | A sequence of [Type](https://learn.microsoft.com/dotnet/api/system.type) instances representing the types to use in case there a node object for the node type equals to the node type identifier defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) is to be created. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeTypes` is a null reference (Nothing in Visual Basic). |

**Remarks**

Any null reference (Nothing in Visual Basic) in `nodeTypes` is ignored.

#### RegisterTypes(Type, params Type\[\])

<span class="api-meta">static · since v2.20</span>

Registers the `nodeType` and the further specified `nodeTypes` as the node object type to create in case there a node instance is to be created for the type node identified by the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) used on the `nodeType` or on one of the `nodeTypes` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void RegisterTypes(Type nodeType, params Type[] nodeTypes)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub RegisterTypes(
    nodeType As Type,
    ParamArray nodeTypes As Type())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeType` | [Type](https://learn.microsoft.com/dotnet/api/system.type) | The [Type](https://learn.microsoft.com/dotnet/api/system.type) instance to use in case there a node object for the node type equals to the node type identifier defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) is to be created. |
| `nodeTypes` | params [Type](https://learn.microsoft.com/dotnet/api/system.type)[] | An array of additional [Type](https://learn.microsoft.com/dotnet/api/system.type) instances to use in case there a node object for the node types equals to the node type identifier defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) is to be created. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeType` or `nodeTypes` is a null reference (Nothing in Visual Basic). |

### RemoveNotifier

<span class="api-meta">virtual</span>

Removes the `node` from the collection of notifiers (= event sources) of this node.

<div class="api-signature" data-lang="csharp">

```csharp
public virtual void RemoveNotifier(OpcContext context, IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Overridable Sub RemoveNotifier(context As OpcContext, node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to remove the `node` as the notifying event source. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance no longer acting as the notifier. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` or `node` is a null reference (Nothing in Visual Basic). |

**Implements**

[RemoveNotifier](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/members#removenotifier)

### ReportEvent

Reports the `eventData` specified to all nodes this [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) is a notifier of.

<div class="api-signature" data-lang="csharp">

```csharp
public void ReportEvent(OpcContext context, OpcEvent eventData)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ReportEvent(context As OpcContext, eventData As OpcEvent)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to notify about the `eventData`. |
| `eventData` | [OpcEvent](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/) | The [OpcEvent](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/) instance to report. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `eventData` does not provide a [OpcEventNodeSnapshot](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventnodesnapshot/). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` or `eventData` is a null reference (Nothing in Visual Basic). |

### ResolveModel

<span class="api-meta">protected · virtual · since v2.54</span>

Resolves the [Model](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#model) of the node.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcNodeModel ResolveModel()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function ResolveModel() As OpcNodeModel
```

</div>

**Returns**

[OpcNodeModel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/)

The [OpcNodeModel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/) assigned to the node, the model of the child with the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) of the node within the [Model](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#model) of its parent node or [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodemodel/members#none) if neither of them is available.

### ResumeModelChangeEvents

<span class="api-meta">since v2.50</span>

Resumes model change tracking and events for this [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) and optionally for all children.

<div class="api-signature" data-lang="csharp">

```csharp
public void ResumeModelChangeEvents(bool recursive = false)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ResumeModelChangeEvents(recursive As Boolean = False)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `recursive` | [Boolean](https://learn.microsoft.com/dotnet/api/system.boolean) | The value `true` if model changes are to be resumed for all children as well; otherwise the value `false`. Optional, default `false`. |

### SuspendModelChangeEvents

<span class="api-meta">since v2.50</span>

Temporarily suspends model change tracking and events for this [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) and optionally for all children.

<div class="api-signature" data-lang="csharp">

```csharp
public void SuspendModelChangeEvents(bool recursive = false)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub SuspendModelChangeEvents(recursive As Boolean = False)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `recursive` | [Boolean](https://learn.microsoft.com/dotnet/api/system.boolean) | The value `true` if model changes are to be suspended for all children as well; otherwise the value `false`. Optional, default `false`. |

### UnregisterType

<span class="api-meta">static · 2 overloads · since v2.20</span>

| Overload | Description |
|---|---|
| [UnregisterType&lt;T&gt;()](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#unregistertype-t1)<span class="api-meta">static · since v2.20</span> | Unregisters the previously registered (see [RegisterType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertype-t1)) type defined by `T` as the [object](https://learn.microsoft.com/dotnet/api/system.object) type to not longer create for the type node identified by the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) defined on the `T` specified. |
| [UnregisterType&lt;T&gt;(OpcNodeId)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#unregistertype-t1-opc-uafx-opcnodeid)<span class="api-meta">static · since v2.20</span> | Unregisters the previously registered (see [RegisterType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertype-t1-opc-uafx-opcnodeid)) type defined by `T` as the [object](https://learn.microsoft.com/dotnet/api/system.object) type to not longer create for the type node identified by the `nodeTypeId` specified. |

#### UnregisterType&lt;T&gt;()

<span class="api-meta">static · since v2.20</span>

Unregisters the previously registered (see [RegisterType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertype-t1)) type defined by `T` as the [object](https://learn.microsoft.com/dotnet/api/system.object) type to not longer create for the type node identified by the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/) defined on the `T` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void UnregisterType<T>()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub UnregisterType(Of T)()
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The node type to unregister for the node type equals to node type identifier defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/). |

#### UnregisterType&lt;T&gt;(OpcNodeId)

<span class="api-meta">static · since v2.20</span>

Unregisters the previously registered (see [RegisterType](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertype-t1-opc-uafx-opcnodeid)) type defined by `T` as the [object](https://learn.microsoft.com/dotnet/api/system.object) type to not longer create for the type node identified by the `nodeTypeId` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void UnregisterType<T>(OpcNodeId nodeTypeId)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub UnregisterType(Of T)(nodeTypeId As OpcNodeId)
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The node type to unregister for the node type equals to `nodeTypeId`. |

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeTypeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The identifier of the type node for which the `T` is to be unregistered. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeTypeId` is a null reference (Nothing in Visual Basic). |

### UnregisterTypes

<span class="api-meta">static · 3 overloads · since v2.20</span>

| Overload | Description |
|---|---|
| [UnregisterTypes(Assembly)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#unregistertypes-system-reflection-assembly)<span class="api-meta">static · since v2.20</span> | Unregisters all previously registered types (see [RegisterTypes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertypes-system-reflection-assembly)) in the `assembly` specified. |
| [UnregisterTypes(IEnumerable&lt;Type&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#unregistertypes-system-collections-generic-ienumerable-of-system-type)<span class="api-meta">static · since v2.20</span> | Unregisters the previously registered (see [RegisterTypes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertypes-system-collections-generic-ienumerable-of-system-type)) `nodeTypes` specified. |
| [UnregisterTypes(Type, params Type\[\])](#unregistertypes-system-type-system-type-array)<span class="api-meta">static · since v2.20</span> | Unregisters the previously registered `nodeType` and the further specified `nodeTypes` (see [RegisterTypes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertypes-system-type-system-type-array)). |

#### UnregisterTypes(Assembly)

<span class="api-meta">static · since v2.20</span>

Unregisters all previously registered types (see [RegisterTypes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertypes-system-reflection-assembly)) in the `assembly` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void UnregisterTypes(Assembly assembly)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub UnregisterTypes(assembly As Assembly)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `assembly` | [Assembly](https://learn.microsoft.com/dotnet/api/system.reflection.assembly) | The [Assembly](https://learn.microsoft.com/dotnet/api/system.reflection.assembly) its types are inspected for types using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/). |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `assembly` is a null reference (Nothing in Visual Basic). |

#### UnregisterTypes(IEnumerable&lt;Type&gt;)

<span class="api-meta">static · since v2.20</span>

Unregisters the previously registered (see [RegisterTypes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertypes-system-collections-generic-ienumerable-of-system-type)) `nodeTypes` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public static void UnregisterTypes(IEnumerable<Type> nodeTypes)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub UnregisterTypes(nodeTypes As IEnumerable(Of Type))
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeTypes` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[Type](https://learn.microsoft.com/dotnet/api/system.type)&gt; | A sequence of [Type](https://learn.microsoft.com/dotnet/api/system.type) instances to unregister for the node types equals to the node type identifiers defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/). |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeTypes` is a null reference (Nothing in Visual Basic). |

#### UnregisterTypes(Type, params Type\[\])

<span class="api-meta">static · since v2.20</span>

Unregisters the previously registered `nodeType` and the further specified `nodeTypes` (see [RegisterTypes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#registertypes-system-type-system-type-array)).

<div class="api-signature" data-lang="csharp">

```csharp
public static void UnregisterTypes(Type nodeType, params Type[] nodeTypes)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Shared Sub UnregisterTypes(
    nodeType As Type,
    ParamArray nodeTypes As Type())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeType` | [Type](https://learn.microsoft.com/dotnet/api/system.type) | The [Type](https://learn.microsoft.com/dotnet/api/system.type) instance to unregister for the node types equals to the node type identifiers defined using the [OpcNodeTypeAttribute](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodetypeattribute/). |
| `nodeTypes` | params [Type](https://learn.microsoft.com/dotnet/api/system.type)[] |  |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeType` or `nodeTypes` is a null reference (Nothing in Visual Basic). |

### UpdateChanges

<span class="api-meta">2 overloads · since v2.10</span>

| Overload | Description |
|---|---|
| [UpdateChanges(OpcContext, OpcNodeChanges)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#updatechanges-opc-uafx-opccontext-opc-uafx-opcnodechanges)<span class="api-meta">since v2.10</span> | Notifies about the `changes` on behalf of the node and removes pending changes which intersect with the `changes` specified. |
| [UpdateChanges(OpcContext, OpcNodeChanges, bool)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#updatechanges-opc-uafx-opccontext-opc-uafx-opcnodechanges-system-boolean)<span class="api-meta">since v2.10</span> | Notifies about the `changes` on behalf of the node (and optionally on its children) and removes pending changes which intersect with the `changes` specified. |

**Exceptions (all overloads)**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` is a null reference (Nothing in Visual Basic). |

#### UpdateChanges(OpcContext, OpcNodeChanges)

<span class="api-meta">since v2.10</span>

Notifies about the `changes` on behalf of the node and removes pending changes which intersect with the `changes` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void UpdateChanges(OpcContext context, OpcNodeChanges changes)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub UpdateChanges(context As OpcContext, changes As OpcNodeChanges)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to notify about the `changes`. |
| `changes` | [OpcNodeChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/) | A bitwise combination of [OpcNodeChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/) members to use to notify changes on behalf of the node. |

**Remarks**

This method influences the value of the properties [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) and [HasPendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#haspendingchanges).

#### UpdateChanges(OpcContext, OpcNodeChanges, bool)

<span class="api-meta">since v2.10</span>

Notifies about the `changes` on behalf of the node (and optionally on its children) and removes pending changes which intersect with the `changes` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void UpdateChanges(
    OpcContext context,
    OpcNodeChanges changes,
    bool recursive)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub UpdateChanges(
    context As OpcContext,
    changes As OpcNodeChanges,
    recursive As Boolean)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to notify about changes performed on the node. |
| `changes` | [OpcNodeChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/) | A bitwise combination of [OpcNodeChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechanges/) members to use to notify changes on behalf of the node (and its children). |
| `recursive` | [Boolean](https://learn.microsoft.com/dotnet/api/system.boolean) | The value true if the `changes` are to be notified for all children as well; otherwise the value false. |

**Remarks**

This method influences the value of the properties [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) and [HasPendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#haspendingchanges).

### WriteAttributeValueCore

<span class="api-meta">protected · virtual</span>

Determines the value of the attribute to write. In case there a callback is assigned to write the value of the attribute (see [WriteDisplayNameCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#writedisplaynamecallback), [WriteDescriptionCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#writedescriptioncallback), [WriteUserWriteAccessCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#writeuserwriteaccesscallback) and [WriteWriteAccessCallback](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#writewriteaccesscallback)) the callback determines the value written; otherwise the `value` is returned.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcAttributeValue<T> WriteAttributeValueCore<T>(
    OpcWriteAttributeValueContext context,
    OpcAttributeValue<T> value)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function WriteAttributeValueCore(Of T)(
    context As OpcWriteAttributeValueContext,
    value As OpcAttributeValue(Of T)) As OpcAttributeValue(Of T)
```

</div>

**Type parameters**

| Name | Description |
|---|---|
| `T` | The type of attribute value to write. |

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcWriteAttributeValueContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecontext/) | The [OpcWriteAttributeValueContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcwriteattributevaluecontext/) to use to write the attribute value. |
| `value` | [OpcAttributeValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributevalue-1/)&lt;T&gt; | The [OpcAttributeValue&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributevalue-1/) to write. |

**Returns**

[OpcAttributeValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributevalue-1/)&lt;T&gt;

The [OpcAttributeValue&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcattributevalue-1/) written.

## Events

### AfterAdded

<span class="api-meta">since v2.26</span>

Occurs after the node has been added to the address space.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeAddedEventHandler AfterAdded
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event AfterAdded As OpcNodeAddedEventHandler
```

</div>

**Event type**

[OpcNodeAddedEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeaddedeventhandler/)

### AfterApplyChanges

Occurs after one or more changes on the node has been notified.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeChangesEventHandler AfterApplyChanges
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event AfterApplyChanges As OpcNodeChangesEventHandler
```

</div>

**Event type**

[OpcNodeChangesEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventhandler/)

**Remarks**

The changes notified either belong to the [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) or to changes on behalf of the node.

### BeforeAdded

<span class="api-meta">since v2.26</span>

Occurs before the node is added to the address space.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeAddedEventHandler BeforeAdded
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event BeforeAdded As OpcNodeAddedEventHandler
```

</div>

**Event type**

[OpcNodeAddedEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeaddedeventhandler/)

### BeforeApplyChanges

Occurs before one or more changes on the node are notified.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeChangesEventHandler BeforeApplyChanges
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event BeforeApplyChanges As OpcNodeChangesEventHandler
```

</div>

**Event type**

[OpcNodeChangesEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventhandler/)

**Remarks**

The changes notified either belong to the [PendingChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#pendingchanges) or to changes on behalf of the node.

### ChangesUnhandled

<span class="api-meta">since v2.50</span>

Occurs when changes applied with [ApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#applychanges-opc-uafx-opccontext) are not monitored or discarded by all monitored items.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeChangesEventHandler ChangesUnhandled
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event ChangesUnhandled As OpcNodeChangesEventHandler
```

</div>

**Event type**

[OpcNodeChangesEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodechangeseventhandler/)

### EventReported

<span class="api-meta">since v2.54</span>

Occurs after an event has been reported using [ReportEvent](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#reportevent).

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeEventReportedEventHandler EventReported
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event EventReported As OpcNodeEventReportedEventHandler
```

</div>

**Event type**

[OpcNodeEventReportedEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeeventreportedeventhandler/)
