Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
CODE PROJECT For Those Who Code
  • Home
  • Articles
  • FAQ
Community
  1. Home
  2. The Lounge
  3. Quick C# quiz

Quick C# quiz

Scheduled Pinned Locked Moved The Lounge
csharphtmlquestion
45 Posts 15 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Stuart Dootson

    Some languages *do* use casing to differentiate between different classes of name. Haskell requires types to start with an upper-case letter, values (and functions are just values of course) to start with a lower-case letter and if you stray away from that, a compiler error is raised. Rust has a convention with similar rules, but raises a warning not an error if you break it.

    Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p

    honey the codewitchH Offline
    honey the codewitchH Offline
    honey the codewitch
    wrote on last edited by
    #33

    and i otherwise love haskell but i'm not a fan of that.

    When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

    1 Reply Last reply
    0
    • honey the codewitchH honey the codewitch

      foo("bar");

      does this refer to an invocation of the method foo? or an invocation of the delegate instance referred to by the variable or argument foo? *headdesk* C# is massively ambiguous without having type information, so now I get to write a visitor to "patch up" the code dom with type information. So basically i always create these expressions as delegate invocations, but then i have to go back through later and find types, so I can change the right ones to method invocations instead. I know C family languages require type information to parse (which is unfortunate) but C# takes it to another level. In for a penny, in for a pound I guess.

      When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #34

      Action fooAction ...

      It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food

      honey the codewitchH 1 Reply Last reply
      0
      • L Lost User

        Action fooAction ...

        It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it. ― Confucian Analects: Rules of Confucius about his food

        honey the codewitchH Offline
        honey the codewitchH Offline
        honey the codewitch
        wrote on last edited by
        #35

        if you're suggesting my naming conventions aren't any good in the example I'd agree. The point however, is that it needs to parse regardless, or it's not C# :)

        When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

        1 Reply Last reply
        0
        • OriginalGriffO OriginalGriff

          honey the codewitch wrote:

          does this refer to an invocation of the method foo? or an invocation of the delegate instance referred to by the variable or argument foo?

          Neither: it means a VB programmer wants to access an array element and forgot where he was.

          "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony AntiTwitter: @DalekDave is now a follower!

          S Offline
          S Offline
          Steve Naidamast
          wrote on last edited by
          #36

          I don't see it that way and I am a VB.NET programmer but also fluent in C#. :laugh: It is amazing how many people really view C# as some completely different type of animal than that of VB.NET... To me, the line of code was calling the method, "foo", with a string parameter...

          Steve Naidamast Sr. Software Engineer Black Falcon Software, Inc. blackfalconsoftware@outlook.com

          N 1 Reply Last reply
          0
          • honey the codewitchH honey the codewitch

            foo("bar");

            does this refer to an invocation of the method foo? or an invocation of the delegate instance referred to by the variable or argument foo? *headdesk* C# is massively ambiguous without having type information, so now I get to write a visitor to "patch up" the code dom with type information. So basically i always create these expressions as delegate invocations, but then i have to go back through later and find types, so I can change the right ones to method invocations instead. I know C family languages require type information to parse (which is unfortunate) but C# takes it to another level. In for a penny, in for a pound I guess.

            When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

            Z Offline
            Z Offline
            zezba9000
            wrote on last edited by
            #37

            "I know C family languages require type information to parse (which is unfortunate) but C# takes it to another level. in for a penny, in for a pound I guess." Static typing allows you to avoid runtime errors, its loads faster and much easier to find what is part of what. Sounds like you're coming from javaScript which teaches you how to think about things very wrong. A delegate in C# is a multicast-delegate in that when it invokes, its actually invoking a generated method that invokes the first function pointer, then the next and so on. It will always use virtual dispatch and can't be inlined. Don't use delegates for everything and only use them for what they're actually meant for.

            honey the codewitchH 1 Reply Last reply
            0
            • Z zezba9000

              "I know C family languages require type information to parse (which is unfortunate) but C# takes it to another level. in for a penny, in for a pound I guess." Static typing allows you to avoid runtime errors, its loads faster and much easier to find what is part of what. Sounds like you're coming from javaScript which teaches you how to think about things very wrong. A delegate in C# is a multicast-delegate in that when it invokes, its actually invoking a generated method that invokes the first function pointer, then the next and so on. It will always use virtual dispatch and can't be inlined. Don't use delegates for everything and only use them for what they're actually meant for.

              honey the codewitchH Offline
              honey the codewitchH Offline
              honey the codewitch
              wrote on last edited by
              #38

              No. I have a c++ background. I'm not talking about static versus dynamic, versus duck typing. I'm talking about parsing, an entirely different thing.

              When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

              Z 1 Reply Last reply
              0
              • honey the codewitchH honey the codewitch

                No. I have a c++ background. I'm not talking about static versus dynamic, versus duck typing. I'm talking about parsing, an entirely different thing.

                When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

                Z Offline
                Z Offline
                zezba9000
                wrote on last edited by
                #39

                ic, sry about that

                honey the codewitchH 1 Reply Last reply
                0
                • Z zezba9000

                  ic, sry about that

                  honey the codewitchH Offline
                  honey the codewitchH Offline
                  honey the codewitch
                  wrote on last edited by
                  #40

                  It might be my fault. Let's see if I can explain better: Say I'm parsing C# and I encounter the following: Console.WriteLine(Int32.MaxValue); My parser can interpret Console as a field, property, method, variable or type. Any one of them is valid here, but we can't know which it is without having type information during the parse. Similarly: Also WriteLine(Int32.MaxValue) could be a delegate invoke on a field, or property reference, or it could be a method call. You can't know during the parse without type information. That's what i mean by needing type information during the parse. It's not that strong typing is bad. It's that requiring type information during a parse dramatically complicates parsing. What I do, is I create multiple trees on a single parse, and then resolve which tree it is after i have the type information for it. Some other parsers (like microsoft's research C# GLR parser) do that too, but it's not easy. The other option is to preparse, but only up to the member definitions (ignoring method bodies and such) and then parsing again once you have all that info.

                  When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

                  Z 1 Reply Last reply
                  0
                  • honey the codewitchH honey the codewitch

                    It might be my fault. Let's see if I can explain better: Say I'm parsing C# and I encounter the following: Console.WriteLine(Int32.MaxValue); My parser can interpret Console as a field, property, method, variable or type. Any one of them is valid here, but we can't know which it is without having type information during the parse. Similarly: Also WriteLine(Int32.MaxValue) could be a delegate invoke on a field, or property reference, or it could be a method call. You can't know during the parse without type information. That's what i mean by needing type information during the parse. It's not that strong typing is bad. It's that requiring type information during a parse dramatically complicates parsing. What I do, is I create multiple trees on a single parse, and then resolve which tree it is after i have the type information for it. Some other parsers (like microsoft's research C# GLR parser) do that too, but it's not easy. The other option is to preparse, but only up to the member definitions (ignoring method bodies and such) and then parsing again once you have all that info.

                    When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

                    Z Offline
                    Z Offline
                    zezba9000
                    wrote on last edited by
                    #41

                    Not something I've thought about much but Is this for a lesson you can't use Roslyn for? I'm not sure how Roslyn handles using-static/type-aliases.

                    using static System.Console;
                    namespace MyNamespace
                    {
                    class Program
                    {
                    private delegate void WriteLineFunc();
                    private static WriteLineFunc WriteLine;

                    	static void Main(string\[\] args)
                    	{
                    		WriteLine();// delegate is used
                    	{
                    {
                    

                    }

                    So if a local, field/method isn't found mark the AST node as un-resolved or add it to an un-resolved list. Then after all files are parsed go through the un-resolved nodes and try to resolve them through the aliased types. Then you don't have to parse over and over if my thinking is correct.

                    honey the codewitchH 1 Reply Last reply
                    0
                    • Z zezba9000

                      Not something I've thought about much but Is this for a lesson you can't use Roslyn for? I'm not sure how Roslyn handles using-static/type-aliases.

                      using static System.Console;
                      namespace MyNamespace
                      {
                      class Program
                      {
                      private delegate void WriteLineFunc();
                      private static WriteLineFunc WriteLine;

                      	static void Main(string\[\] args)
                      	{
                      		WriteLine();// delegate is used
                      	{
                      {
                      

                      }

                      So if a local, field/method isn't found mark the AST node as un-resolved or add it to an un-resolved list. Then after all files are parsed go through the un-resolved nodes and try to resolve them through the aliased types. Then you don't have to parse over and over if my thinking is correct.

                      honey the codewitchH Offline
                      honey the codewitchH Offline
                      honey the codewitch
                      wrote on last edited by
                      #42

                      That's pretty much what I'm doing. I'm using the codedom as my ast. Every root member ref (like "foo" in foo.bar) becomes a "variable reference" with "slang:unresolved" as one of it's "user-data" keys so I can find it later. Every other member ref, like "bar" in the above is considered a field reference by default, also marked with "slang:unresolved" later on, I revisit the AST after the parse, find each of these nodes, get the scope from where I'm at and use the type information I now have to replace these "slang:unresolved" items with the appropriate references. It has served me well so far.

                      When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

                      1 Reply Last reply
                      0
                      • honey the codewitchH honey the codewitch

                        foo("bar");

                        does this refer to an invocation of the method foo? or an invocation of the delegate instance referred to by the variable or argument foo? *headdesk* C# is massively ambiguous without having type information, so now I get to write a visitor to "patch up" the code dom with type information. So basically i always create these expressions as delegate invocations, but then i have to go back through later and find types, so I can change the right ones to method invocations instead. I know C family languages require type information to parse (which is unfortunate) but C# takes it to another level. In for a penny, in for a pound I guess.

                        When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

                        U Offline
                        U Offline
                        User 14060113
                        wrote on last edited by
                        #43

                        In C#, property, method or function names usually begin with a capital letter, whereas local variables should begin with a small letter and private member names with a prefix like "_" or "m". In C#, it is particularly important to stick to these unwritten conding rules in order to make the answer to your question more obvious:

                        foo

                        should be a local variable. But still, if you see

                        Foo("bar");

                        then Foo could be a public property name. So you can never be sure.

                        honey the codewitchH 1 Reply Last reply
                        0
                        • U User 14060113

                          In C#, property, method or function names usually begin with a capital letter, whereas local variables should begin with a small letter and private member names with a prefix like "_" or "m". In C#, it is particularly important to stick to these unwritten conding rules in order to make the answer to your question more obvious:

                          foo

                          should be a local variable. But still, if you see

                          Foo("bar");

                          then Foo could be a public property name. So you can never be sure.

                          honey the codewitchH Offline
                          honey the codewitchH Offline
                          honey the codewitch
                          wrote on last edited by
                          #44

                          I didn't mention it, but the question was asked in context of a C# parser. How would it know what to parse without type information? :doh: It was to illustrate the complexity of the parsing of C#. The whole thing is a bit of nightmare. I recently wrote this - Slang Part 1: Parsing a C# Subset into the CodeDOM[^] to parse it, and i had to do backtracking and tree resolution with type and context info after the parse. I thought C was bad with parsing casts and pointer ops vs type*'s. Guess I didn't entirely get that point across, so my bad, but there it is.

                          When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.

                          1 Reply Last reply
                          0
                          • S Steve Naidamast

                            I don't see it that way and I am a VB.NET programmer but also fluent in C#. :laugh: It is amazing how many people really view C# as some completely different type of animal than that of VB.NET... To me, the line of code was calling the method, "foo", with a string parameter...

                            Steve Naidamast Sr. Software Engineer Black Falcon Software, Inc. blackfalconsoftware@outlook.com

                            N Offline
                            N Offline
                            nullpointer 0
                            wrote on last edited by
                            #45

                            He is referring to old classic VB, which of course any public function in Module can be called from anywhere.

                            {}*

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups