C# - Interface - Type initialization
Consider the example:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
I can initialize it
as:
string _stringBag = new { "Alex", "Sam", "Gates", "Riaz" };
What are the advantages of having Interface here?
c#
add a comment |
Consider the example:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
I can initialize it
as:
string _stringBag = new { "Alex", "Sam", "Gates", "Riaz" };
What are the advantages of having Interface here?
c#
add a comment |
Consider the example:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
I can initialize it
as:
string _stringBag = new { "Alex", "Sam", "Gates", "Riaz" };
What are the advantages of having Interface here?
c#
Consider the example:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
I can initialize it
as:
string _stringBag = new { "Alex", "Sam", "Gates", "Riaz" };
What are the advantages of having Interface here?
c#
c#
edited Nov 21 at 2:41
Cœur
17.4k9102143
17.4k9102143
asked Aug 22 '09 at 9:26
user160677
1,80393553
1,80393553
add a comment |
add a comment |
4 Answers
4
active
oldest
votes
The advantage is that it shows to readers that you're not using the fact that it happens to be an array. I tend to declare local variables as the most general type which contains all the functionality I need. For instance, I'll do:
using (TextReader reader = File.OpenText(...))
instead of specifying StreamReader
.
It's rarely hugely important, but it does make it easier to change the details of the implementation. For example, suppose for whatever reason we wanted to change your example to use a List<T>
instead of an array.
You can change this:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
to this:
IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };
and know it'll still compile. Some of the semantics may not be the same, so you still need to be careful - but at least you know it won't be using any array-specific methods.
not C and not Python! *g
– Henrik P. Hessel
Aug 22 '09 at 9:37
add a comment |
This is an example of generics and you are creating an IList with string datatype.
Generics introduce to the .NET
Framework the concept of type
parameters, which make it possible to
design classes and methods that defer
the specification of one or more types
until the class or method is declared
and instantiated by client code. For
example, by using a generic type
parameter T you can write a single
class that other client code can use
without incurring the cost or risk of
runtime casts or boxing operations.
Read more here
What is cool about generics, why use them?
Do C# Generics Have a Perfomance Benefit?
sorry ! would have framed my question ,more specific. What is the advantage of initializiing the interface indirectly.(Ofcourse we can not create instance for interface).
– user160677
Aug 22 '09 at 9:36
I don't think that this question is really about generics.
– Stefan Steinegger
Aug 22 '09 at 9:42
add a comment |
There are no advantages or disadvantages. If your code requires an IList, then give it one. If your code requires an array, then give it one.
There are disadvantages. see my answer.
– Stefan Steinegger
Aug 22 '09 at 9:43
add a comment |
I don't really understand why an array implements IList. When you call Add, it throws an exception. An array does not have IList semantics, because it is not resizable. That's why I avoid having an array as IList. If I need a list, i would write it like this:
IList<string> _lstColl = new List<string>() { "Alex", "Sam", "Gates", "Riaz" };
(PS: There are quite a few problems with using of the collection interfaces of the standard framework, like missing methods and even missing interfaces. When you are working with collection interfaces, as usual for instance when using NHibernate, you recognize that they are sometimes badly designed. The developers of this interfaces didn't seem to use them a lot I think. Just my opinion.)
It's because there isn't a separate interface that only has an indexer and a count.
– Jon Skeet
Aug 22 '09 at 9:35
1
Yes, see my PS about collection interfaces. I'm really disappointed about the .NET collection design. I mean, this list types and semantics are well known since decades. Why do they come up with a new framework with such a bad collection design?
– Stefan Steinegger
Aug 22 '09 at 9:40
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f1315603%2fc-sharp-interface-type-initialization%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
The advantage is that it shows to readers that you're not using the fact that it happens to be an array. I tend to declare local variables as the most general type which contains all the functionality I need. For instance, I'll do:
using (TextReader reader = File.OpenText(...))
instead of specifying StreamReader
.
It's rarely hugely important, but it does make it easier to change the details of the implementation. For example, suppose for whatever reason we wanted to change your example to use a List<T>
instead of an array.
You can change this:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
to this:
IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };
and know it'll still compile. Some of the semantics may not be the same, so you still need to be careful - but at least you know it won't be using any array-specific methods.
not C and not Python! *g
– Henrik P. Hessel
Aug 22 '09 at 9:37
add a comment |
The advantage is that it shows to readers that you're not using the fact that it happens to be an array. I tend to declare local variables as the most general type which contains all the functionality I need. For instance, I'll do:
using (TextReader reader = File.OpenText(...))
instead of specifying StreamReader
.
It's rarely hugely important, but it does make it easier to change the details of the implementation. For example, suppose for whatever reason we wanted to change your example to use a List<T>
instead of an array.
You can change this:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
to this:
IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };
and know it'll still compile. Some of the semantics may not be the same, so you still need to be careful - but at least you know it won't be using any array-specific methods.
not C and not Python! *g
– Henrik P. Hessel
Aug 22 '09 at 9:37
add a comment |
The advantage is that it shows to readers that you're not using the fact that it happens to be an array. I tend to declare local variables as the most general type which contains all the functionality I need. For instance, I'll do:
using (TextReader reader = File.OpenText(...))
instead of specifying StreamReader
.
It's rarely hugely important, but it does make it easier to change the details of the implementation. For example, suppose for whatever reason we wanted to change your example to use a List<T>
instead of an array.
You can change this:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
to this:
IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };
and know it'll still compile. Some of the semantics may not be the same, so you still need to be careful - but at least you know it won't be using any array-specific methods.
The advantage is that it shows to readers that you're not using the fact that it happens to be an array. I tend to declare local variables as the most general type which contains all the functionality I need. For instance, I'll do:
using (TextReader reader = File.OpenText(...))
instead of specifying StreamReader
.
It's rarely hugely important, but it does make it easier to change the details of the implementation. For example, suppose for whatever reason we wanted to change your example to use a List<T>
instead of an array.
You can change this:
IList<string> _lstColl = new { "Alex", "Sam", "Gates", "Riaz" };
to this:
IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };
and know it'll still compile. Some of the semantics may not be the same, so you still need to be careful - but at least you know it won't be using any array-specific methods.
answered Aug 22 '09 at 9:35
Jon Skeet
1076k67478728402
1076k67478728402
not C and not Python! *g
– Henrik P. Hessel
Aug 22 '09 at 9:37
add a comment |
not C and not Python! *g
– Henrik P. Hessel
Aug 22 '09 at 9:37
not C and not Python! *g
– Henrik P. Hessel
Aug 22 '09 at 9:37
not C and not Python! *g
– Henrik P. Hessel
Aug 22 '09 at 9:37
add a comment |
This is an example of generics and you are creating an IList with string datatype.
Generics introduce to the .NET
Framework the concept of type
parameters, which make it possible to
design classes and methods that defer
the specification of one or more types
until the class or method is declared
and instantiated by client code. For
example, by using a generic type
parameter T you can write a single
class that other client code can use
without incurring the cost or risk of
runtime casts or boxing operations.
Read more here
What is cool about generics, why use them?
Do C# Generics Have a Perfomance Benefit?
sorry ! would have framed my question ,more specific. What is the advantage of initializiing the interface indirectly.(Ofcourse we can not create instance for interface).
– user160677
Aug 22 '09 at 9:36
I don't think that this question is really about generics.
– Stefan Steinegger
Aug 22 '09 at 9:42
add a comment |
This is an example of generics and you are creating an IList with string datatype.
Generics introduce to the .NET
Framework the concept of type
parameters, which make it possible to
design classes and methods that defer
the specification of one or more types
until the class or method is declared
and instantiated by client code. For
example, by using a generic type
parameter T you can write a single
class that other client code can use
without incurring the cost or risk of
runtime casts or boxing operations.
Read more here
What is cool about generics, why use them?
Do C# Generics Have a Perfomance Benefit?
sorry ! would have framed my question ,more specific. What is the advantage of initializiing the interface indirectly.(Ofcourse we can not create instance for interface).
– user160677
Aug 22 '09 at 9:36
I don't think that this question is really about generics.
– Stefan Steinegger
Aug 22 '09 at 9:42
add a comment |
This is an example of generics and you are creating an IList with string datatype.
Generics introduce to the .NET
Framework the concept of type
parameters, which make it possible to
design classes and methods that defer
the specification of one or more types
until the class or method is declared
and instantiated by client code. For
example, by using a generic type
parameter T you can write a single
class that other client code can use
without incurring the cost or risk of
runtime casts or boxing operations.
Read more here
What is cool about generics, why use them?
Do C# Generics Have a Perfomance Benefit?
This is an example of generics and you are creating an IList with string datatype.
Generics introduce to the .NET
Framework the concept of type
parameters, which make it possible to
design classes and methods that defer
the specification of one or more types
until the class or method is declared
and instantiated by client code. For
example, by using a generic type
parameter T you can write a single
class that other client code can use
without incurring the cost or risk of
runtime casts or boxing operations.
Read more here
What is cool about generics, why use them?
Do C# Generics Have a Perfomance Benefit?
edited May 23 '17 at 12:30
Community♦
11
11
answered Aug 22 '09 at 9:29
rahul
149k42202246
149k42202246
sorry ! would have framed my question ,more specific. What is the advantage of initializiing the interface indirectly.(Ofcourse we can not create instance for interface).
– user160677
Aug 22 '09 at 9:36
I don't think that this question is really about generics.
– Stefan Steinegger
Aug 22 '09 at 9:42
add a comment |
sorry ! would have framed my question ,more specific. What is the advantage of initializiing the interface indirectly.(Ofcourse we can not create instance for interface).
– user160677
Aug 22 '09 at 9:36
I don't think that this question is really about generics.
– Stefan Steinegger
Aug 22 '09 at 9:42
sorry ! would have framed my question ,more specific. What is the advantage of initializiing the interface indirectly.(Ofcourse we can not create instance for interface).
– user160677
Aug 22 '09 at 9:36
sorry ! would have framed my question ,more specific. What is the advantage of initializiing the interface indirectly.(Ofcourse we can not create instance for interface).
– user160677
Aug 22 '09 at 9:36
I don't think that this question is really about generics.
– Stefan Steinegger
Aug 22 '09 at 9:42
I don't think that this question is really about generics.
– Stefan Steinegger
Aug 22 '09 at 9:42
add a comment |
There are no advantages or disadvantages. If your code requires an IList, then give it one. If your code requires an array, then give it one.
There are disadvantages. see my answer.
– Stefan Steinegger
Aug 22 '09 at 9:43
add a comment |
There are no advantages or disadvantages. If your code requires an IList, then give it one. If your code requires an array, then give it one.
There are disadvantages. see my answer.
– Stefan Steinegger
Aug 22 '09 at 9:43
add a comment |
There are no advantages or disadvantages. If your code requires an IList, then give it one. If your code requires an array, then give it one.
There are no advantages or disadvantages. If your code requires an IList, then give it one. If your code requires an array, then give it one.
answered Aug 22 '09 at 9:31
Christian Hayter
26.5k56090
26.5k56090
There are disadvantages. see my answer.
– Stefan Steinegger
Aug 22 '09 at 9:43
add a comment |
There are disadvantages. see my answer.
– Stefan Steinegger
Aug 22 '09 at 9:43
There are disadvantages. see my answer.
– Stefan Steinegger
Aug 22 '09 at 9:43
There are disadvantages. see my answer.
– Stefan Steinegger
Aug 22 '09 at 9:43
add a comment |
I don't really understand why an array implements IList. When you call Add, it throws an exception. An array does not have IList semantics, because it is not resizable. That's why I avoid having an array as IList. If I need a list, i would write it like this:
IList<string> _lstColl = new List<string>() { "Alex", "Sam", "Gates", "Riaz" };
(PS: There are quite a few problems with using of the collection interfaces of the standard framework, like missing methods and even missing interfaces. When you are working with collection interfaces, as usual for instance when using NHibernate, you recognize that they are sometimes badly designed. The developers of this interfaces didn't seem to use them a lot I think. Just my opinion.)
It's because there isn't a separate interface that only has an indexer and a count.
– Jon Skeet
Aug 22 '09 at 9:35
1
Yes, see my PS about collection interfaces. I'm really disappointed about the .NET collection design. I mean, this list types and semantics are well known since decades. Why do they come up with a new framework with such a bad collection design?
– Stefan Steinegger
Aug 22 '09 at 9:40
add a comment |
I don't really understand why an array implements IList. When you call Add, it throws an exception. An array does not have IList semantics, because it is not resizable. That's why I avoid having an array as IList. If I need a list, i would write it like this:
IList<string> _lstColl = new List<string>() { "Alex", "Sam", "Gates", "Riaz" };
(PS: There are quite a few problems with using of the collection interfaces of the standard framework, like missing methods and even missing interfaces. When you are working with collection interfaces, as usual for instance when using NHibernate, you recognize that they are sometimes badly designed. The developers of this interfaces didn't seem to use them a lot I think. Just my opinion.)
It's because there isn't a separate interface that only has an indexer and a count.
– Jon Skeet
Aug 22 '09 at 9:35
1
Yes, see my PS about collection interfaces. I'm really disappointed about the .NET collection design. I mean, this list types and semantics are well known since decades. Why do they come up with a new framework with such a bad collection design?
– Stefan Steinegger
Aug 22 '09 at 9:40
add a comment |
I don't really understand why an array implements IList. When you call Add, it throws an exception. An array does not have IList semantics, because it is not resizable. That's why I avoid having an array as IList. If I need a list, i would write it like this:
IList<string> _lstColl = new List<string>() { "Alex", "Sam", "Gates", "Riaz" };
(PS: There are quite a few problems with using of the collection interfaces of the standard framework, like missing methods and even missing interfaces. When you are working with collection interfaces, as usual for instance when using NHibernate, you recognize that they are sometimes badly designed. The developers of this interfaces didn't seem to use them a lot I think. Just my opinion.)
I don't really understand why an array implements IList. When you call Add, it throws an exception. An array does not have IList semantics, because it is not resizable. That's why I avoid having an array as IList. If I need a list, i would write it like this:
IList<string> _lstColl = new List<string>() { "Alex", "Sam", "Gates", "Riaz" };
(PS: There are quite a few problems with using of the collection interfaces of the standard framework, like missing methods and even missing interfaces. When you are working with collection interfaces, as usual for instance when using NHibernate, you recognize that they are sometimes badly designed. The developers of this interfaces didn't seem to use them a lot I think. Just my opinion.)
edited Aug 22 '09 at 9:40
answered Aug 22 '09 at 9:33
Stefan Steinegger
54k13110178
54k13110178
It's because there isn't a separate interface that only has an indexer and a count.
– Jon Skeet
Aug 22 '09 at 9:35
1
Yes, see my PS about collection interfaces. I'm really disappointed about the .NET collection design. I mean, this list types and semantics are well known since decades. Why do they come up with a new framework with such a bad collection design?
– Stefan Steinegger
Aug 22 '09 at 9:40
add a comment |
It's because there isn't a separate interface that only has an indexer and a count.
– Jon Skeet
Aug 22 '09 at 9:35
1
Yes, see my PS about collection interfaces. I'm really disappointed about the .NET collection design. I mean, this list types and semantics are well known since decades. Why do they come up with a new framework with such a bad collection design?
– Stefan Steinegger
Aug 22 '09 at 9:40
It's because there isn't a separate interface that only has an indexer and a count.
– Jon Skeet
Aug 22 '09 at 9:35
It's because there isn't a separate interface that only has an indexer and a count.
– Jon Skeet
Aug 22 '09 at 9:35
1
1
Yes, see my PS about collection interfaces. I'm really disappointed about the .NET collection design. I mean, this list types and semantics are well known since decades. Why do they come up with a new framework with such a bad collection design?
– Stefan Steinegger
Aug 22 '09 at 9:40
Yes, see my PS about collection interfaces. I'm really disappointed about the .NET collection design. I mean, this list types and semantics are well known since decades. Why do they come up with a new framework with such a bad collection design?
– Stefan Steinegger
Aug 22 '09 at 9:40
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f1315603%2fc-sharp-interface-type-initialization%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown